├── settings.gradle
├── fastlane
└── metadata
│ └── android
│ ├── de-DE
│ ├── title.txt
│ ├── images
│ │ ├── icon.png
│ │ ├── featureGraphic.png
│ │ └── phoneScreenshots
│ │ │ ├── Screenshot_20230322-195258_FOSS Browser.png
│ │ │ ├── Screenshot_20230322-195354_FOSS Browser.png
│ │ │ ├── Screenshot_20230322-195412_FOSS Browser.png
│ │ │ ├── Screenshot_20230322-195506_FOSS Browser.png
│ │ │ ├── Screenshot_20230322-195534_FOSS Browser.png
│ │ │ └── Screenshot_20230322-195617_FOSS Browser.png
│ ├── short_description.txt
│ ├── changelogs
│ │ ├── 136.txt
│ │ ├── 130.txt
│ │ ├── 120.txt
│ │ ├── 133.txt
│ │ ├── 127.txt
│ │ ├── 139.txt
│ │ ├── 135.txt
│ │ ├── 124.txt
│ │ ├── 125.txt
│ │ ├── 134.txt
│ │ ├── 118.txt
│ │ ├── 138.txt
│ │ ├── 117.txt
│ │ ├── 128.txt
│ │ ├── 129.txt
│ │ ├── 119.txt
│ │ ├── 131.txt
│ │ ├── 126.txt
│ │ ├── 132.txt
│ │ ├── 114.txt
│ │ ├── 115.txt
│ │ ├── 116.txt
│ │ ├── 122.txt
│ │ ├── 123.txt
│ │ ├── 121.txt
│ │ ├── 113.txt
│ │ └── 137.txt
│ └── full_description.txt
│ └── en-US
│ ├── title.txt
│ ├── short_description.txt
│ ├── images
│ ├── icon.png
│ ├── featureGraphic.png
│ └── phoneScreenshots
│ │ ├── Screenshot_20230322-195258_FOSS Browser.png
│ │ ├── Screenshot_20230322-195354_FOSS Browser.png
│ │ ├── Screenshot_20230322-195412_FOSS Browser.png
│ │ ├── Screenshot_20230322-195506_FOSS Browser.png
│ │ ├── Screenshot_20230322-195534_FOSS Browser.png
│ │ └── Screenshot_20230322-195617_FOSS Browser.png
│ ├── changelogs
│ ├── 136.txt
│ ├── 130.txt
│ ├── 120.txt
│ ├── 133.txt
│ ├── 127.txt
│ ├── 139.txt
│ ├── 135.txt
│ ├── 124.txt
│ ├── 125.txt
│ ├── 134.txt
│ ├── 118.txt
│ ├── 138.txt
│ ├── 117.txt
│ ├── 128.txt
│ ├── 129.txt
│ ├── 119.txt
│ ├── 131.txt
│ ├── 126.txt
│ ├── 132.txt
│ ├── 114.txt
│ ├── 115.txt
│ ├── 116.txt
│ ├── 122.txt
│ ├── 123.txt
│ ├── 121.txt
│ ├── 113.txt
│ └── 137.txt
│ └── full_description.txt
├── gradle.properties
├── wiki
├── ui_filter.png
├── settings_ui.png
├── ui_overview.png
├── settings_backup.png
├── settings_delete.png
├── settings_filter.png
├── ui_fast_toggle.png
├── settings_edit_list.png
├── settings_general.png
├── settings_gestures.png
├── settings_privacy.png
└── settings_edit_profile.png
├── graphics
├── Zeichnung.png
├── Zeichnung_wiki.png
├── featuresGrafic.png
├── settings_template.xcf
└── ic_launcher-playstore.png
├── app
├── debug
│ ├── app-debug.apk
│ └── output-metadata.json
├── release
│ ├── app-release.apk
│ └── output-metadata.json
├── src
│ └── main
│ │ ├── ic_launcher-playstore.png
│ │ ├── res
│ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── values
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── styles.xml
│ │ │ └── attrs.xml
│ │ ├── menu
│ │ │ ├── menu_list_tabs.xml
│ │ │ ├── menu_list_history.xml
│ │ │ ├── menu_help.xml
│ │ │ ├── menu_list_start.xml
│ │ │ ├── menu_list_bookmark.xml
│ │ │ └── menu_bottom_overview.xml
│ │ ├── drawable
│ │ │ ├── bg_chip_icon_state.xml
│ │ │ ├── bg_chip_state_list.xml
│ │ │ ├── bg_chip_state_list_domain.xml
│ │ │ ├── icon_check.xml
│ │ │ ├── icon_download.xml
│ │ │ ├── icon_file.xml
│ │ │ ├── icon_home.xml
│ │ │ ├── icon_tab_plus.xml
│ │ │ ├── icon_arrow_down_gest.xml
│ │ │ ├── icon_arrow_up_gest.xml
│ │ │ ├── icon_profile_protected.xml
│ │ │ ├── icon_bookmark.xml
│ │ │ ├── icon_post.xml
│ │ │ ├── icon_tab.xml
│ │ │ ├── icon_delete.xml
│ │ │ ├── icon_desktop.xml
│ │ │ ├── icon_star.xml
│ │ │ ├── icon_clipboard.xml
│ │ │ ├── icon_profile_standard.xml
│ │ │ ├── dialog_border.xml
│ │ │ ├── icon_edit.xml
│ │ │ ├── icon_image.xml
│ │ │ ├── icon_open_with.xml
│ │ │ ├── icon_tab_remove.xml
│ │ │ ├── icon_redirect.xml
│ │ │ ├── icon_popup.xml
│ │ │ ├── icon_profile_trusted.xml
│ │ │ ├── icon_search.xml
│ │ │ ├── icon_https.xml
│ │ │ ├── icon_alert.xml
│ │ │ ├── icon_image_broken.xml
│ │ │ ├── icon_screen.xml
│ │ │ ├── icon_tab_background.xml
│ │ │ ├── icon_tab_unselected.xml
│ │ │ ├── icon_dots.xml
│ │ │ ├── icon_menu_save.xml
│ │ │ ├── icon_refresh.xml
│ │ │ ├── icon_audio.xml
│ │ │ ├── icon_overflow.xml
│ │ │ ├── icon_link.xml
│ │ │ ├── icon_adblock.xml
│ │ │ ├── icon_location.xml
│ │ │ ├── icon_history.xml
│ │ │ ├── icon_camera.xml
│ │ │ ├── icon_close.xml
│ │ │ ├── icon_help.xml
│ │ │ ├── icon_profile_changed.xml
│ │ │ ├── icon_http.xml
│ │ │ ├── icon_microphone.xml
│ │ │ ├── icon_save_as.xml
│ │ │ ├── icon_dom.xml
│ │ │ ├── icon_paste.xml
│ │ │ ├── icon_menu_share.xml
│ │ │ ├── icon_savedata.xml
│ │ │ ├── icon_night.xml
│ │ │ ├── icon_java.xml
│ │ │ ├── icon_cookie.xml
│ │ │ ├── icon_web.xml
│ │ │ ├── ic_launcher_monochrome.xml
│ │ │ ├── icon_settings.xml
│ │ │ └── icon_fingerprint.xml
│ │ ├── layout
│ │ │ ├── view_preference_switch.xml
│ │ │ ├── custom_redirects_list.xml
│ │ │ ├── dialog_edit_text.xml
│ │ │ ├── custom_redirects_row.xml
│ │ │ ├── activity_settings.xml
│ │ │ ├── create_new_redirect.xml
│ │ │ ├── item_menu.xml
│ │ │ ├── activity_settings_delete.xml
│ │ │ └── activity_settings_backup.xml
│ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ ├── xml
│ │ │ ├── data_extraction_rules.xml
│ │ │ ├── backup.xml
│ │ │ ├── preference_backup.xml
│ │ │ ├── preference_delete.xml
│ │ │ ├── preference_setting.xml
│ │ │ └── preference_general.xml
│ │ ├── raw
│ │ │ └── error.svg
│ │ └── values-night
│ │ │ └── themes.xml
│ │ └── java
│ │ └── de
│ │ └── baumann
│ │ └── browser
│ │ ├── browser
│ │ ├── AlbumController.java
│ │ ├── BrowserController.java
│ │ ├── DataURIParser.java
│ │ ├── BrowserContainer.java
│ │ ├── List_trusted.java
│ │ ├── List_standard.java
│ │ └── List_protected.java
│ │ ├── view
│ │ ├── RedirectsViewHolder.java
│ │ ├── GridItem.java
│ │ ├── NinjaToast.java
│ │ ├── AdapterProfileList.java
│ │ ├── AdapterCustomRedirect.java
│ │ └── SwipeTouchListener.java
│ │ ├── fragment
│ │ ├── Fragment_settings_Filter.java
│ │ ├── Fragment_settings_General.java
│ │ ├── Fragment_settings_Profile.java
│ │ ├── Fragment_settings_Delete.java
│ │ ├── Fragment_settings_Gesture.java
│ │ └── Fragment_settings_UI.java
│ │ ├── objects
│ │ ├── CustomRedirect.java
│ │ └── CustomRedirectsHelper.java
│ │ ├── unit
│ │ ├── ClipboardUnit.java
│ │ └── RecordUnit.java
│ │ ├── ShareActivity.java
│ │ ├── database
│ │ ├── RecordHelper.java
│ │ └── Record.java
│ │ ├── activity
│ │ ├── Settings_UI.java
│ │ ├── Settings_Backup.java
│ │ ├── Settings_Activity.java
│ │ ├── Settings_Filter.java
│ │ ├── Settings_General.java
│ │ ├── Settings_Gesture.java
│ │ ├── Settings_PrivacyActivity.java
│ │ └── Settings_Profile.java
│ │ └── preferences
│ │ ├── ListSwitchPreference.java
│ │ └── BasePreferenceFragment.java
└── build.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── crowdin.yml
├── .idea
├── vcs.xml
└── gradle.xml
├── .gitignore
├── .travis.yml
├── LICENSE.md
├── .SECURITY.md
├── .github
└── FUNDING.yml
├── gradlew.bat
└── CODE_OF_CONDUCT.md
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/title.txt:
--------------------------------------------------------------------------------
1 | FOSS Browser
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | FOSS Browser
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | android.enableJetifier=true
2 | android.useAndroidX=true
--------------------------------------------------------------------------------
/wiki/ui_filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/ui_filter.png
--------------------------------------------------------------------------------
/graphics/Zeichnung.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/graphics/Zeichnung.png
--------------------------------------------------------------------------------
/wiki/settings_ui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/settings_ui.png
--------------------------------------------------------------------------------
/wiki/ui_overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/ui_overview.png
--------------------------------------------------------------------------------
/app/debug/app-debug.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/debug/app-debug.apk
--------------------------------------------------------------------------------
/wiki/settings_backup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/settings_backup.png
--------------------------------------------------------------------------------
/wiki/settings_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/settings_delete.png
--------------------------------------------------------------------------------
/wiki/settings_filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/settings_filter.png
--------------------------------------------------------------------------------
/wiki/ui_fast_toggle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/ui_fast_toggle.png
--------------------------------------------------------------------------------
/app/release/app-release.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/release/app-release.apk
--------------------------------------------------------------------------------
/graphics/Zeichnung_wiki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/graphics/Zeichnung_wiki.png
--------------------------------------------------------------------------------
/graphics/featuresGrafic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/graphics/featuresGrafic.png
--------------------------------------------------------------------------------
/wiki/settings_edit_list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/settings_edit_list.png
--------------------------------------------------------------------------------
/wiki/settings_general.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/settings_general.png
--------------------------------------------------------------------------------
/wiki/settings_gestures.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/settings_gestures.png
--------------------------------------------------------------------------------
/wiki/settings_privacy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/settings_privacy.png
--------------------------------------------------------------------------------
/graphics/settings_template.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/graphics/settings_template.xcf
--------------------------------------------------------------------------------
/wiki/settings_edit_profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/wiki/settings_edit_profile.png
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/graphics/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/graphics/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | "FOSS Browser" is a fully free (as in freedom) open source Android browser.
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/de-DE/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/short_description.txt:
--------------------------------------------------------------------------------
1 | "FOSS Browser" ist ein komplett freier (wie in Freiheit), quelloffener Browser für Android.
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/crowdin.yml:
--------------------------------------------------------------------------------
1 | files:
2 | - source: /app/src/**/res/values/strings*.xml
3 | translation: /%original_path%-%two_letters_code%/%original_file_name%
4 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/de-DE/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #474A00
4 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/136.txt:
--------------------------------------------------------------------------------
1 | ### v 9.5
2 |
3 | - fix: can't open URL from outside, if it was closed before
4 | - fix: Active button colors on OLED theme #1006
5 | - new: hebrew translation
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/136.txt:
--------------------------------------------------------------------------------
1 | ### v 9.5
2 |
3 | - fix: can't open URL from outside, if it was closed before
4 | - fix: Active button colors on OLED theme #1006
5 | - new: hebrew translation
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/130.txt:
--------------------------------------------------------------------------------
1 | ### v 9.0
2 |
3 | - fix: popup menu in Overview
4 | - fix: searchbar not hiding in back pressing #852
5 | - fix: edit favorites layout not scrolling #854
6 | - updated: translations
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/130.txt:
--------------------------------------------------------------------------------
1 | ### v 9.0
2 |
3 | - fix: popup menu in Overview
4 | - fix: searchbar not hiding in back pressing #852
5 | - fix: edit favorites layout not scrolling #854
6 | - updated: translations
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195258_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195258_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195354_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195354_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195412_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195412_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195506_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195506_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195534_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195534_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195617_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/de-DE/images/phoneScreenshots/Screenshot_20230322-195617_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195258_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195258_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195354_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195354_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195412_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195412_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195506_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195506_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195534_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195534_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195617_FOSS Browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/T8RIN/browser/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_20230322-195617_FOSS Browser.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/120.txt:
--------------------------------------------------------------------------------
1 | ### v 8.4.1
2 |
3 | - fix: camera issue #729
4 | - fix: profile icon in toolbar #728
5 | - fix: cookie settings when switching tab
6 | - new: FOSS Browser in context menu of marked text #723
7 | - updated: translations
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/120.txt:
--------------------------------------------------------------------------------
1 | ### v 8.4.1
2 |
3 | - fix: camera issue #729
4 | - fix: profile icon in toolbar #728
5 | - fix: cookie settings when switching tab
6 | - new: FOSS Browser in context menu of marked text #723
7 | - updated: translations
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_list_tabs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/browser/AlbumController.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.browser;
2 |
3 | import android.view.View;
4 |
5 | public interface AlbumController {
6 | View getAlbumView();
7 | void activate();
8 | void deactivate();
9 | }
10 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Oct 23 22:58:08 CEST 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/133.txt:
--------------------------------------------------------------------------------
1 | ### v 9.3
2 |
3 | - fix: Half screen after orientation change #919
4 | - fix: not all menu items accessible in landscape orientation
5 | - fix: Download dialog does not decode multibyte file name #917
6 | - fix: File name is not shown in the download prompt #916
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/133.txt:
--------------------------------------------------------------------------------
1 | ### v 9.3
2 |
3 | - fix: Half screen after orientation change #919
4 | - fix: not all menu items accessible in landscape orientation
5 | - fix: Download dialog does not decode multibyte file name #917
6 | - fix: File name is not shown in the download prompt #916
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_chip_icon_state.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_chip_state_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/127.txt:
--------------------------------------------------------------------------------
1 | v 8.8
2 |
3 | - new: Wiki integrated in settings and menus
4 | - new: notification when playing audio on background #800
5 | - new: gestures
6 | - fix: mailto and other intents not working
7 | - fix: button "reload " is hidden #803
8 | - fix: play audio in background #800
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/127.txt:
--------------------------------------------------------------------------------
1 | v 8.8
2 |
3 | - new: Wiki integrated in settings and menus
4 | - new: notification when playing audio on background #800
5 | - new: gestures
6 | - fix: mailto and other intents not working
7 | - fix: button "reload " is hidden #803
8 | - fix: play audio in background #800
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_chip_state_list_domain.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/view_preference_switch.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # built application files
2 | # files for the dex VM
3 | # Java class files
4 | # generated files
5 | gen/
6 |
7 | # Local configuration file (sdk path, etc)
8 | local.properties
9 |
10 | # Eclipse project files
11 | # Android Studio
12 | .idea/
13 | .gradle
14 | gradle
15 | *.iml
16 | /app/debug/
17 | /app/release/
18 | /app/build/
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/139.txt:
--------------------------------------------------------------------------------
1 | ### v 9.11 "Traven"
2 |
3 | - new: context menu in tab overview
4 | - new: icons in menus
5 | - new: delete entries from search
6 | - new: http-warning before loading
7 | - fix: layout in menus
8 | - fix: menus
9 | - fix: onReceivedHttpAuthRequest password showing #1069
10 | - fix: download names #1071
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/139.txt:
--------------------------------------------------------------------------------
1 | ### v 9.11 "Traven"
2 |
3 | - new: context menu in tab overview
4 | - new: icons in menus
5 | - new: delete entries from search
6 | - new: http-warning before loading
7 | - fix: layout in menus
8 | - fix: menus
9 | - fix: onReceivedHttpAuthRequest password showing #1069
10 | - fix: download names #1071
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_check.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/135.txt:
--------------------------------------------------------------------------------
1 | ### v 9.4
2 |
3 | - new: "post on website" in sharing menu
4 | - new: Serbo-Croation translation
5 | - new: Support app split screen #937
6 | - fix: Restored functionality to proceed according to user selection #941
7 | - updated: translations
8 | - updated: build libraries
9 | - removed: swipe to reload -> use gestures instead
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/135.txt:
--------------------------------------------------------------------------------
1 | ### v 9.4
2 |
3 | - new: "post on website" in sharing menu
4 | - new: Serbo-Croation translation
5 | - new: Support app split screen #937
6 | - fix: Restored functionality to proceed according to user selection #941
7 | - updated: translations
8 | - updated: build libraries
9 | - removed: swipe to reload -> use gestures instead
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/124.txt:
--------------------------------------------------------------------------------
1 | ### v 8.6
2 |
3 | - new: play audio on background
4 | - new: Quick toggle to keep screen on
5 | - new: Option to keep screen awake
6 | - updated: Privacy Policy
7 | - updated: translations
8 | - improved: MaterialYou theme
9 | - improved: search in history, bookmarks, ...
10 | - improved: close open tabs dialog after making selection
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/125.txt:
--------------------------------------------------------------------------------
1 | ### v 8.6
2 |
3 | - new: play audio on background
4 | - new: Quick toggle to keep screen on
5 | - new: Option to keep screen awake
6 | - updated: Privacy Policy
7 | - updated: translations
8 | - improved: MaterialYou theme
9 | - improved: search in history, bookmarks, ...
10 | - improved: close open tabs dialog after making selection
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/124.txt:
--------------------------------------------------------------------------------
1 | ### v 8.6
2 |
3 | - new: play audio on background
4 | - new: Quick toggle to keep screen on
5 | - new: Option to keep screen awake
6 | - updated: Privacy Policy
7 | - updated: translations
8 | - improved: MaterialYou theme
9 | - improved: search in history, bookmarks, ...
10 | - improved: close open tabs dialog after making selection
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/125.txt:
--------------------------------------------------------------------------------
1 | ### v 8.6
2 |
3 | - new: play audio on background
4 | - new: Quick toggle to keep screen on
5 | - new: Option to keep screen awake
6 | - updated: Privacy Policy
7 | - updated: translations
8 | - improved: MaterialYou theme
9 | - improved: search in history, bookmarks, ...
10 | - improved: close open tabs dialog after making selection
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_list_history.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_download.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/view/RedirectsViewHolder.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.view;
2 |
3 | import android.view.View;
4 |
5 | import androidx.annotation.NonNull;
6 | import androidx.recyclerview.widget.RecyclerView;
7 |
8 | public class RedirectsViewHolder extends RecyclerView.ViewHolder {
9 | public RedirectsViewHolder(@NonNull View view) {
10 | super(view);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/134.txt:
--------------------------------------------------------------------------------
1 | ### v 9.3
2 |
3 | - fix: Half screen after orientation change #919
4 | - fix: not all menu items accessible in landscape orientation
5 | - fix: Download dialog does not decode multibyte file name #917
6 | - fix: File name is not shown in the download prompt #916
7 | - fix: Browser crashes when switching embedded video to full screen #925
8 | - fix: Persistent swipe issues #924
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/134.txt:
--------------------------------------------------------------------------------
1 | ### v 9.3
2 |
3 | - fix: Half screen after orientation change #919
4 | - fix: not all menu items accessible in landscape orientation
5 | - fix: Download dialog does not decode multibyte file name #917
6 | - fix: File name is not shown in the download prompt #916
7 | - fix: Browser crashes when switching embedded video to full screen #925
8 | - fix: Persistent swipe issues #924
--------------------------------------------------------------------------------
/app/release/output-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "artifactType": {
4 | "type": "APK",
5 | "kind": "Directory"
6 | },
7 | "applicationId": "de.foss.browser",
8 | "variantName": "release",
9 | "elements": [
10 | {
11 | "type": "SINGLE",
12 | "filters": [],
13 | "versionCode": 117,
14 | "versionName": "8.2",
15 | "outputFile": "app-release.apk"
16 | }
17 | ]
18 | }
--------------------------------------------------------------------------------
/app/debug/output-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "artifactType": {
4 | "type": "APK",
5 | "kind": "Directory"
6 | },
7 | "applicationId": "de.baumann.browser",
8 | "variantName": "processDebugResources",
9 | "elements": [
10 | {
11 | "type": "SINGLE",
12 | "filters": [],
13 | "versionCode": 106,
14 | "versionName": "7.3",
15 | "outputFile": "app-debug.apk"
16 | }
17 | ]
18 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_file.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_home.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_tab_plus.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/data_extraction_rules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_arrow_down_gest.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_arrow_up_gest.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/view/GridItem.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.view;
2 |
3 | public class GridItem {
4 | private final String title;
5 | private final int data;
6 |
7 | public GridItem (String title, int data) {
8 | this.title = title;
9 | this.data = data;
10 | }
11 |
12 | public String getTitle() {
13 | return title;
14 | }
15 | public int getData() {
16 | return data;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_profile_protected.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_bookmark.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_post.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_tab.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_delete.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_help.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/fragment/Fragment_settings_Filter.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.fragment;
2 |
3 | import android.os.Bundle;
4 |
5 | import de.baumann.browser.R;
6 | import de.baumann.browser.preferences.BasePreferenceFragment;
7 |
8 | public class Fragment_settings_Filter extends BasePreferenceFragment {
9 | @Override
10 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
11 | setPreferencesFromResource(R.xml.preference_filter, rootKey);
12 | }
13 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_desktop.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_star.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/118.txt:
--------------------------------------------------------------------------------
1 | ### v 8.3 (WIP)
2 |
3 | - fix: Swipe to reload not working sometimes #654
4 | - fix: Restoring bookmarks does not work properly #653
5 | - fix: some force closes #642 #643
6 | - fix: gestures and text-edit-scrolling collide #633
7 | - fix: Toolbar hides, but reappears if page is refreshed #660
8 | - fix: minor fixes and UIredirects webview
9 | - new: save dektopMode, Javascript, domStorage also for history items
10 | - removed: PlayStore support
11 | - updated: translations
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/118.txt:
--------------------------------------------------------------------------------
1 | ### v 8.3 (WIP)
2 |
3 | - fix: Swipe to reload not working sometimes #654
4 | - fix: Restoring bookmarks does not work properly #653
5 | - fix: some force closes #642 #643
6 | - fix: gestures and text-edit-scrolling collide #633
7 | - fix: Toolbar hides, but reappears if page is refreshed #660
8 | - fix: minor fixes and UIredirects webview
9 | - new: save dektopMode, Javascript, domStorage also for history items
10 | - removed: PlayStore support
11 | - updated: translations
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/138.txt:
--------------------------------------------------------------------------------
1 | ### v 9.10
2 |
3 | - new: Clipboard record preference thanks to @Bnyro
4 | - new: show url on link menus or when clicking menu title
5 | - new: show urls in lists
6 | - new: tab number in overview
7 | - fix: refactored settings
8 | - fix: layout issues on small devices #976
9 | - fix: Password field for protected sites shows entries #1039
10 | - fix: youtube redirects
11 | - fix: onReceivedError
12 | - fix: Settings refactor thanks to @Bnyro
13 | - fix: OLED theme issues #1052
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/138.txt:
--------------------------------------------------------------------------------
1 | ### v 9.10
2 |
3 | - new: Clipboard record preference thanks to @Bnyro
4 | - new: show url on link menus or when clicking menu title
5 | - new: show urls in lists
6 | - new: tab number in overview
7 | - fix: refactored settings
8 | - fix: layout issues on small devices #976
9 | - fix: Password field for protected sites shows entries #1039
10 | - fix: youtube redirects
11 | - fix: onReceivedError
12 | - fix: Settings refactor thanks to @Bnyro
13 | - fix: OLED theme issues #1052
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: android
2 | android:
3 | components:
4 | - tools
5 | - platform-tools
6 | - tools
7 |
8 | before_install:
9 | - yes | sdkmanager "platforms;android-27" "build-tools;27.0.3"
10 |
11 | before_cache:
12 | - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
13 | - rm -fr $HOME/.gradle/caches/*/plugin-resolution/
14 | cache:
15 | directories:
16 | - $HOME/.gradle/caches/
17 | - $HOME/.gradle/wrapper/
18 | - $HOME/.android/build-cache
19 | script:
20 | - ./gradlew build
21 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/fragment/Fragment_settings_General.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.fragment;
2 |
3 | import android.os.Bundle;
4 |
5 | import de.baumann.browser.R;
6 | import de.baumann.browser.preferences.BasePreferenceFragment;
7 |
8 | public class Fragment_settings_General extends BasePreferenceFragment {
9 | @Override
10 | public void onCreatePreferences(Bundle savedInstanceState,String rootKey) {
11 | setPreferencesFromResource(R.xml.preference_general, rootKey);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/117.txt:
--------------------------------------------------------------------------------
1 | - fix: chip desktop, javascript, DOM should not be visible in settings when editing filter names (thanks to @woheller69)
2 | - fix: Sometimes Favicon is stored several times in database (thanks to @woheller69)
3 | - fix: permission problems
4 | - fix: download problems
5 | - new: edit startSite and history items
6 | - new: Privacy Enhancement #602 (thanks to @woheller69)
7 | - new: choose preferred theme
8 | - updated: Edit filter names (thanks to @woheller69)
9 | - updated: backup preference
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/117.txt:
--------------------------------------------------------------------------------
1 | - fix: chip desktop, javascript, DOM should not be visible in settings when editing filter names (thanks to @woheller69)
2 | - fix: Sometimes Favicon is stored several times in database (thanks to @woheller69)
3 | - fix: permission problems
4 | - fix: download problems
5 | - new: edit startSite and history items
6 | - new: Privacy Enhancement #602 (thanks to @woheller69)
7 | - new: choose preferred theme
8 | - updated: Edit filter names (thanks to @woheller69)
9 | - updated: backup preference
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/view/NinjaToast.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.view;
2 |
3 | import android.content.Context;
4 | import android.widget.Toast;
5 |
6 |
7 | public class NinjaToast {
8 |
9 | public static void show(Context context, int stringResId) {
10 | Toast.makeText(context, context.getString(stringResId), Toast.LENGTH_SHORT).show();
11 | }
12 |
13 | public static void show(Context context, String text) {
14 | Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
15 | }
16 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_clipboard.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_profile_standard.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/dialog_border.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_edit.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/128.txt:
--------------------------------------------------------------------------------
1 | ### v 8.9
2 |
3 | - fix: some webpages show half the screen #817
4 | - fix: Shortcut on the home screen #830
5 | - fix: crash on first start #829 #820
6 | - fix: Settings button does not open settings #823
7 | - fix: cannot connect to some webservices #818
8 | - fix: default user-agent is now received from installed webview
9 | - updated: translations
10 | - new: moved tab-dialog in overview
11 | - new: permanent night mode (optional) #825
12 | - new: help buttons in most important UI-elements
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/129.txt:
--------------------------------------------------------------------------------
1 | ### v 8.9
2 |
3 | - fix: some webpages show half the screen #817
4 | - fix: Shortcut on the home screen #830
5 | - fix: crash on first start #829 #820
6 | - fix: Settings button does not open settings #823
7 | - fix: cannot connect to some webservices #818
8 | - fix: default user-agent is now received from installed webview
9 | - updated: translations
10 | - new: moved tab-dialog in overview
11 | - new: permanent night mode (optional) #825
12 | - new: help buttons in most important UI-elements
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/128.txt:
--------------------------------------------------------------------------------
1 | ### v 8.9
2 |
3 | - fix: some webpages show half the screen #817
4 | - fix: Shortcut on the home screen #830
5 | - fix: crash on first start #829 #820
6 | - fix: Settings button does not open settings #823
7 | - fix: cannot connect to some webservices #818
8 | - fix: default user-agent is now received from installed webview
9 | - updated: translations
10 | - new: moved tab-dialog in overview
11 | - new: permanent night mode (optional) #825
12 | - new: help buttons in most important UI-elements
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/129.txt:
--------------------------------------------------------------------------------
1 | ### v 8.9
2 |
3 | - fix: some webpages show half the screen #817
4 | - fix: Shortcut on the home screen #830
5 | - fix: crash on first start #829 #820
6 | - fix: Settings button does not open settings #823
7 | - fix: cannot connect to some webservices #818
8 | - fix: default user-agent is now received from installed webview
9 | - updated: translations
10 | - new: moved tab-dialog in overview
11 | - new: permanent night mode (optional) #825
12 | - new: help buttons in most important UI-elements
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_image.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_open_with.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/119.txt:
--------------------------------------------------------------------------------
1 | ### v 8.4
2 |
3 | - new: camera use (thanks to @woheller69)
4 | - new: microphone use
5 | - new: webRTC support
6 | - new: DRM protected video playback (thanks to @woheller69)
7 | - new: support of encrypted backups (thanks to @woheller69)
8 | - new: profiles instead of whitelists
9 | - new: restore tabs on restart (optional)
10 | - new: restore tabs when killed by system (optional) (thanks to @woheller69)
11 | - fix: AutoComplete TextView (thanks to @woheller69)
12 | - updated: setting screens
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/119.txt:
--------------------------------------------------------------------------------
1 | ### v 8.4
2 |
3 | - new: camera use (thanks to @woheller69)
4 | - new: microphone use
5 | - new: webRTC support
6 | - new: DRM protected video playback (thanks to @woheller69)
7 | - new: support of encrypted backups (thanks to @woheller69)
8 | - new: profiles instead of whitelists
9 | - new: restore tabs on restart (optional)
10 | - new: restore tabs when killed by system (optional) (thanks to @woheller69)
11 | - fix: AutoComplete TextView (thanks to @woheller69)
12 | - updated: setting screens
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_tab_remove.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_redirect.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_popup.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_profile_trusted.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_search.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/custom_redirects_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_https.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_alert.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_image_broken.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/131.txt:
--------------------------------------------------------------------------------
1 | ### v 9.1
2 |
3 | - fix: removed unnecessary toasts in fastToggle
4 | - fix: Browser crash on search with "%" #861
5 | - fix: progressbar visible when searching
6 | - fix: UI of FastToggleDialog #872
7 | - fix: UI of edit/save as dialog #873
8 | - fix: https warning #863
9 | - fix: Images not displayed #881
10 | - new: gesture to copy link to clipboard #868
11 | - new: copy link to clipboard in context menu #878
12 | - new: switched license to APGL
13 | - new: redirect YouTube/Instagram/Twitter links
14 | - new: show number of tabs in overview
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/131.txt:
--------------------------------------------------------------------------------
1 | ### v 9.1
2 |
3 | - fix: removed unnecessary toasts in fastToggle
4 | - fix: Browser crash on search with "%" #861
5 | - fix: progressbar visible when searching
6 | - fix: UI of FastToggleDialog #872
7 | - fix: UI of edit/save as dialog #873
8 | - fix: https warning #863
9 | - fix: Images not displayed #881
10 | - new: gesture to copy link to clipboard #868
11 | - new: copy link to clipboard in context menu #878
12 | - new: switched license to APGL
13 | - new: redirect YouTube/Instagram/Twitter links
14 | - new: show number of tabs in overview
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_tab_background.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_tab_unselected.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_dots.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_menu_save.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_refresh.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_audio.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_overflow.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/126.txt:
--------------------------------------------------------------------------------
1 | ### v 8.7
2 |
3 | - fix: dark theme in settings activities
4 | - fix: night mode (webView)
5 | - new: play audio on background
6 | - new: Quick toggle to keep screen on
7 | - new: gesture settings for long pressing
8 | - new: open links in background
9 | - new: swipe through menu
10 | - updated: F-Droid (screenshots, description)
11 | - updated: Privacy Policy
12 | - updated: translations (17 languages supported!)
13 | - improved: MaterialYou theme
14 | - improved: search in history, bookmarks, ...
15 | - improved: close open tabs dialog after making selection
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/126.txt:
--------------------------------------------------------------------------------
1 | ### v 8.7
2 |
3 | - fix: dark theme in settings activities
4 | - fix: night mode (webView)
5 | - new: play audio on background
6 | - new: Quick toggle to keep screen on
7 | - new: gesture settings for long pressing
8 | - new: open links in background
9 | - new: swipe through menu
10 | - updated: F-Droid (screenshots, description)
11 | - updated: Privacy Policy
12 | - updated: translations (17 languages supported!)
13 | - improved: MaterialYou theme
14 | - improved: search in history, bookmarks, ...
15 | - improved: close open tabs dialog after making selection
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_link.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_adblock.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_location.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_history.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_camera.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | This program is free software: you can redistribute it and/or modify
2 | it under the terms of the GNU Affero General Public License as published by
3 | the Free Software Foundation, either version 3 of the License, or
4 | (at your option) any later version.
5 |
6 | This program is distributed in the hope that it will be useful,
7 | but WITHOUT ANY WARRANTY; without even the implied warranty of
8 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 | GNU Affero General Public License for more details: .
10 |
11 | **Used open source libraries:**
12 |
13 | "Material Design Icons"
14 | https://github.com/Templarian/MaterialDesign
--------------------------------------------------------------------------------
/app/src/main/res/raw/error.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_close.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_help.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/132.txt:
--------------------------------------------------------------------------------
1 | ### v 9.2
2 |
3 | - fix: crash when sharing links #883
4 | - fix: no password field on webserver authentication #891
5 | - fix: some swiping issues #899 by Lakjdf
6 | - fix: support for intent scheme URLs again #898 by Lakjdf
7 | - fix: refactored code to make it much more readable #896 by T8RIN
8 | - fix: share link
9 | - fix: Home-screen links improvment #906
10 | - fix: no password field on authentication dialog #891
11 | - updated: layout and user experience
12 | - updated: settings for night view
13 | - updated: settings for gestures
14 | - updated: settings for editing profiles #909
15 | - updated translations: *Now 21 languages are fully supported!*
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/132.txt:
--------------------------------------------------------------------------------
1 | ### v 9.2
2 |
3 | - fix: crash when sharing links #883
4 | - fix: no password field on webserver authentication #891
5 | - fix: some swiping issues #899 by Lakjdf
6 | - fix: support for intent scheme URLs again #898 by Lakjdf
7 | - fix: refactored code to make it much more readable #896 by T8RIN
8 | - fix: share link
9 | - fix: Home-screen links improvment #906
10 | - fix: no password field on authentication dialog #891
11 | - updated: layout and user experience
12 | - updated: settings for night view
13 | - updated: settings for gestures
14 | - updated: settings for editing profiles #909
15 | - updated translations: *Now 21 languages are fully supported!*
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/objects/CustomRedirect.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.objects;
2 |
3 | public class CustomRedirect {
4 | public String source;
5 | public String target;
6 |
7 | public CustomRedirect(String source, String target) {
8 | this.source = source;
9 | this.target = target;
10 | }
11 |
12 | public void setSource(String source) {
13 | this.source = source;
14 | }
15 |
16 | public String getSource() {
17 | return source;
18 | }
19 |
20 | public void setTarget(String target) {
21 | this.target = target;
22 | }
23 |
24 | public String getTarget() {
25 | return target;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/.SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | Use this section to tell people about which versions of your project are
6 | currently being supported with security updates.
7 |
8 | | Version | Supported |
9 | | ------- | ------------------ |
10 | | 5.1.x | :white_check_mark: |
11 | | 5.0.x | :x: |
12 | | 4.0.x | :white_check_mark: |
13 | | < 4.0 | :x: |
14 |
15 | ## Reporting a Vulnerability
16 |
17 | Use this section to tell people how to report a vulnerability.
18 |
19 | Tell them where to go, how often they can expect to get an update on a
20 | reported vulnerability, what to expect if the vulnerability is accepted or
21 | declined, etc.
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_profile_changed.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/unit/ClipboardUnit.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.unit;
2 |
3 | import android.app.Activity;
4 | import android.content.ClipData;
5 | import android.content.ClipboardManager;
6 | import android.content.Context;
7 |
8 | import androidx.annotation.Nullable;
9 |
10 | public class ClipboardUnit {
11 | @Nullable
12 | public static String getPrimary(Activity activity) {
13 | ClipboardManager clipboardManager = (ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE);
14 | ClipData primaryClip = clipboardManager.getPrimaryClip();
15 | if (primaryClip == null) return null;
16 | return primaryClip.getItemAt(0).getText().toString();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/browser/BrowserController.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.browser;
2 |
3 | import android.graphics.Bitmap;
4 | import android.net.Uri;
5 | import android.view.View;
6 | import android.webkit.ValueCallback;
7 | import android.webkit.WebChromeClient;
8 |
9 | public interface BrowserController {
10 | void updateProgress(int progress);
11 | void showAlbum(AlbumController albumController);
12 | void removeAlbum(AlbumController albumController);
13 | void showFileChooser(ValueCallback filePathCallback);
14 | void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback);
15 | void hideOverview();
16 | void onHideCustomView();
17 | Bitmap favicon ();
18 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_http.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/114.txt:
--------------------------------------------------------------------------------
1 | - new: edit bookmark-url (thanks to @woheller69)
2 | - new: Reload on swipeDown when at top of webpage (thanks to @woheller69)
3 | - new: Added GlobalPrivacyControl (thanks to @woheller69)
4 | - new: Remove device info from useragent, use prefixes like DuckDuckGo browser (thanks to @woheller69)
5 | - new: fivicons in bookmarklist (thanks to @woheller69)
6 | - new: option to select blocked content
7 | - updated: do not track (thanks to @woheller69)
8 | - updated: translations
9 | - fix: sorting of tabs in overview
10 | - fix: DOM-storage description in settings
11 | - fix: apply settings on back/forward navigation
12 | - fix: Ad-Blocking also blocks "social" media
13 | - fix: open link externally
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/115.txt:
--------------------------------------------------------------------------------
1 | - new: edit bookmark-url (thanks to @woheller69)
2 | - new: Reload on swipeDown when at top of webpage (thanks to @woheller69)
3 | - new: Added GlobalPrivacyControl (thanks to @woheller69)
4 | - new: Remove device info from useragent, use prefixes like DuckDuckGo browser (thanks to @woheller69)
5 | - new: fivicons in bookmarklist (thanks to @woheller69)
6 | - new: option to select blocked content
7 | - updated: do not track (thanks to @woheller69)
8 | - updated: translations
9 | - fix: sorting of tabs in overview
10 | - fix: DOM-storage description in settings
11 | - fix: apply settings on back/forward navigation
12 | - fix: Ad-Blocking also blocks "social" media
13 | - fix: open link externally
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/116.txt:
--------------------------------------------------------------------------------
1 | - new: edit bookmark-url (thanks to @woheller69)
2 | - new: Reload on swipeDown when at top of webpage (thanks to @woheller69)
3 | - new: Added GlobalPrivacyControl (thanks to @woheller69)
4 | - new: Remove device info from useragent, use prefixes like DuckDuckGo browser (thanks to @woheller69)
5 | - new: fivicons in bookmarklist (thanks to @woheller69)
6 | - new: option to select blocked content
7 | - updated: do not track (thanks to @woheller69)
8 | - updated: translations
9 | - fix: sorting of tabs in overview
10 | - fix: DOM-storage description in settings
11 | - fix: apply settings on back/forward navigation
12 | - fix: Ad-Blocking also blocks "social" media
13 | - fix: open link externally
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/114.txt:
--------------------------------------------------------------------------------
1 | - new: edit bookmark-url (thanks to @woheller69)
2 | - new: Reload on swipeDown when at top of webpage (thanks to @woheller69)
3 | - new: Added GlobalPrivacyControl (thanks to @woheller69)
4 | - new: Remove device info from useragent, use prefixes like DuckDuckGo browser (thanks to @woheller69)
5 | - new: fivicons in bookmarklist (thanks to @woheller69)
6 | - new: option to select blocked content
7 | - updated: do not track (thanks to @woheller69)
8 | - updated: translations
9 | - fix: sorting of tabs in overview
10 | - fix: DOM-storage description in settings
11 | - fix: apply settings on back/forward navigation
12 | - fix: Ad-Blocking also blocks "social" media
13 | - fix: open link externally
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/115.txt:
--------------------------------------------------------------------------------
1 | - new: edit bookmark-url (thanks to @woheller69)
2 | - new: Reload on swipeDown when at top of webpage (thanks to @woheller69)
3 | - new: Added GlobalPrivacyControl (thanks to @woheller69)
4 | - new: Remove device info from useragent, use prefixes like DuckDuckGo browser (thanks to @woheller69)
5 | - new: fivicons in bookmarklist (thanks to @woheller69)
6 | - new: option to select blocked content
7 | - updated: do not track (thanks to @woheller69)
8 | - updated: translations
9 | - fix: sorting of tabs in overview
10 | - fix: DOM-storage description in settings
11 | - fix: apply settings on back/forward navigation
12 | - fix: Ad-Blocking also blocks "social" media
13 | - fix: open link externally
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/116.txt:
--------------------------------------------------------------------------------
1 | - new: edit bookmark-url (thanks to @woheller69)
2 | - new: Reload on swipeDown when at top of webpage (thanks to @woheller69)
3 | - new: Added GlobalPrivacyControl (thanks to @woheller69)
4 | - new: Remove device info from useragent, use prefixes like DuckDuckGo browser (thanks to @woheller69)
5 | - new: fivicons in bookmarklist (thanks to @woheller69)
6 | - new: option to select blocked content
7 | - updated: do not track (thanks to @woheller69)
8 | - updated: translations
9 | - fix: sorting of tabs in overview
10 | - fix: DOM-storage description in settings
11 | - fix: apply settings on back/forward navigation
12 | - fix: Ad-Blocking also blocks "social" media
13 | - fix: open link externally
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_microphone.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_save_as.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_dom.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_list_start.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_paste.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/122.txt:
--------------------------------------------------------------------------------
1 | v 8.5.1
2 |
3 | - fix: camera issue #729
4 | - fix: profile icon in toolbar #728
5 | - fix: cookie settings when switching tab
6 | - fix: stay at night mode, when openeing bookmark
7 | - fix: close open tabs window after making selection #746
8 | - new: restart and reload tabs
9 | - new: Material You Design #726
10 | - new: OLED dark theme Feature #742
11 | - new: FOSS Browser in context menu of marked text #723
12 | - new: remember night mode per site #669
13 | - new: adding "copy link" button to download dialog #733
14 | - new: remember night mode, when opening new tabs
15 | - new: gesture: open start site
16 | - new: keep screen on
17 | - improved: set favicons (thanks to @woheller69)
18 | - updated: translations
19 | - updated: build libraries
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/123.txt:
--------------------------------------------------------------------------------
1 | v 8.5.2
2 |
3 | - fix: camera issue #729
4 | - fix: profile icon in toolbar #728
5 | - fix: cookie settings when switching tab
6 | - fix: stay at night mode, when openeing bookmark
7 | - fix: close open tabs window after making selection #746
8 | - new: restart and reload tabs
9 | - new: Material You Design #726
10 | - new: OLED dark theme Feature #742
11 | - new: FOSS Browser in context menu of marked text #723
12 | - new: remember night mode per site #669
13 | - new: adding "copy link" button to download dialog #733
14 | - new: remember night mode, when opening new tabs
15 | - new: gesture: open start site
16 | - new: keep screen on
17 | - improved: set favicons (thanks to @woheller69)
18 | - updated: translations
19 | - updated: build libraries
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/122.txt:
--------------------------------------------------------------------------------
1 | v 8.5.1
2 |
3 | - fix: camera issue #729
4 | - fix: profile icon in toolbar #728
5 | - fix: cookie settings when switching tab
6 | - fix: stay at night mode, when openeing bookmark
7 | - fix: close open tabs window after making selection #746
8 | - new: restart and reload tabs
9 | - new: Material You Design #726
10 | - new: OLED dark theme Feature #742
11 | - new: FOSS Browser in context menu of marked text #723
12 | - new: remember night mode per site #669
13 | - new: adding "copy link" button to download dialog #733
14 | - new: remember night mode, when opening new tabs
15 | - new: gesture: open start site
16 | - new: keep screen on
17 | - improved: set favicons (thanks to @woheller69)
18 | - updated: translations
19 | - updated: build libraries
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/123.txt:
--------------------------------------------------------------------------------
1 | v 8.5.2
2 |
3 | - fix: camera issue #729
4 | - fix: profile icon in toolbar #728
5 | - fix: cookie settings when switching tab
6 | - fix: stay at night mode, when openeing bookmark
7 | - fix: close open tabs window after making selection #746
8 | - new: restart and reload tabs
9 | - new: Material You Design #726
10 | - new: OLED dark theme Feature #742
11 | - new: FOSS Browser in context menu of marked text #723
12 | - new: remember night mode per site #669
13 | - new: adding "copy link" button to download dialog #733
14 | - new: remember night mode, when opening new tabs
15 | - new: gesture: open start site
16 | - new: keep screen on
17 | - improved: set favicons (thanks to @woheller69)
18 | - updated: translations
19 | - updated: build libraries
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/121.txt:
--------------------------------------------------------------------------------
1 | ### v 8.5
2 |
3 | - fix: camera issue #729
4 | - fix: profile icon in toolbar #728
5 | - fix: cookie settings when switching tab
6 | - fix: stay at night mode, when openeing bookmark
7 | - fix: close open tabs window after making selection #746
8 | - new: restart and reload tabs
9 | - new: Material You Design #726
10 | - new: OLED dark theme Feature #742
11 | - new: FOSS Browser in context menu of marked text #723
12 | - new: remember night mode per site #669
13 | - new: adding "copy link" button to download dialog #733
14 | - new: remember night mode, when opening new tabs
15 | - new: gesture: open start site
16 | - new: keep screen on
17 | - improved: set favicons (thanks to @woheller69)
18 | - updated: translations
19 | - updated: build libraries
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/121.txt:
--------------------------------------------------------------------------------
1 | ### v 8.5
2 |
3 | - fix: camera issue #729
4 | - fix: profile icon in toolbar #728
5 | - fix: cookie settings when switching tab
6 | - fix: stay at night mode, when openeing bookmark
7 | - fix: close open tabs window after making selection #746
8 | - new: restart and reload tabs
9 | - new: Material You Design #726
10 | - new: OLED dark theme Feature #742
11 | - new: FOSS Browser in context menu of marked text #723
12 | - new: remember night mode per site #669
13 | - new: adding "copy link" button to download dialog #733
14 | - new: remember night mode, when opening new tabs
15 | - new: gesture: open start site
16 | - new: keep screen on
17 | - improved: set favicons (thanks to @woheller69)
18 | - updated: translations
19 | - updated: build libraries
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/ShareActivity.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 |
7 | import de.baumann.browser.activity.BrowserActivity;
8 |
9 | public class ShareActivity extends Activity {
10 | @Override
11 | protected void onCreate(Bundle savedInstanceState) {
12 | super.onCreate(savedInstanceState);
13 | Intent intent = getIntent();
14 | String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
15 | Intent browserIntent = new Intent(this, BrowserActivity.class);
16 | browserIntent.putExtra(android.content.Intent.EXTRA_TEXT, sharedText);
17 | browserIntent.setAction("postLink");
18 | startActivity(browserIntent);
19 | finish();
20 | }
21 | }
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username e.g., user1
5 | open_collective: # Replace with a single Open Collective username e.g., user1
6 | ko_fi: # Replace with a single Ko-fi username e.g., user1
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username e.g., user1
10 | issuehunt: # Replace with a single IssueHunt username e.g., user1
11 | otechie: # Replace with a single Otechie username e.g., user1
12 | custom: ['https://www.paypal.com/donate/?hosted_button_id=NP6TGYDYP9SHY']
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_menu_share.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_list_bookmark.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
12 |
13 | -
14 |
15 |
18 |
21 |
22 |
23 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/113.txt:
--------------------------------------------------------------------------------
1 | - new: toggle mobile/desktop mode (thanks to @woheller69)
2 | - new: auto update of AdBlock-hosts (thanks to @woheller69)
3 | - new: save desktop mode/javascript/DOM content settings in bookmarks (thanks to @woheller69)
4 | - new: show colored bookmark icon when editing bookmark category (thanks to @woheller69)
5 | - new: Use settings stored in bookmark when a bookmark is found in search (thanks to @woheller69)
6 | - new: Show icon source of item (start page, bookmarks, history) in search (thanks to @woheller69)
7 | - new: save form data/use autofill service in settings
8 | - updated: translations
9 | - fix: correct icon colors when importing bookmarks (thanks to @woheller69)
10 | - fix: content hidden by toolbar
11 | - fix: opening new tabs on older Android versions
12 | - fix: Dark mode not applied to all tabs
13 | - fix: toolbar input handling
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/113.txt:
--------------------------------------------------------------------------------
1 | - new: toggle mobile/desktop mode (thanks to @woheller69)
2 | - new: auto update of AdBlock-hosts (thanks to @woheller69)
3 | - new: save desktop mode/javascript/DOM content settings in bookmarks (thanks to @woheller69)
4 | - new: show colored bookmark icon when editing bookmark category (thanks to @woheller69)
5 | - new: Use settings stored in bookmark when a bookmark is found in search (thanks to @woheller69)
6 | - new: Show icon source of item (start page, bookmarks, history) in search (thanks to @woheller69)
7 | - new: save form data/use autofill service in settings
8 | - updated: translations
9 | - fix: correct icon colors when importing bookmarks (thanks to @woheller69)
10 | - fix: content hidden by toolbar
11 | - fix: opening new tabs on older Android versions
12 | - fix: Dark mode not applied to all tabs
13 | - fix: toolbar input handling
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_savedata.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_edit_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_night.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_java.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_bottom_overview.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
10 |
11 |
16 |
21 |
22 |
27 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_cookie.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/browser/DataURIParser.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.browser;
2 |
3 | import android.util.Base64;
4 | import android.webkit.MimeTypeMap;
5 |
6 | public class DataURIParser {
7 |
8 | private final String filename;
9 | private final byte[] imagedata;
10 |
11 | public DataURIParser(String url) {
12 | //Log.d("DataURIParse", url);
13 | String data = url.substring(url.indexOf(",") + 1);
14 | //Log.d("DataURIParse", data);
15 | String mimeType = url.substring(url.indexOf(":") + 1, url.indexOf(";"));
16 | //Log.d("DataURIParse", mimeType);
17 | String fileType = url.substring(url.indexOf(":") + 1, url.indexOf("/"));
18 | //Log.d("DataURIParse", fileType);
19 | String suffix = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);
20 | //Log.d("DataURIParse", suffix);
21 | filename = fileType + "." + suffix;
22 | //Log.d("DataURIParse", filename);
23 | imagedata = Base64.decode(data, Base64.DEFAULT);
24 | }
25 |
26 | public String getFilename() {
27 | return filename;
28 | }
29 |
30 | public byte[] getImagedata() {
31 | return imagedata;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/changelogs/137.txt:
--------------------------------------------------------------------------------
1 | ### v 9.6
2 |
3 | - removed: redirection for Instagram
4 | - fix: Redirect error from YouTube #991
5 | - fix: loading images fit screen width
6 | - fix: cookie manager, when going back in history
7 | - fix: buttons not reachable on some dialogs
8 | - fix: Auth-request dialog
9 | - fix: download dialog
10 | - fix: startsite is now the wiki #997
11 | - fix: crash when open downloads, while default file manager not installed
12 | - fix: issues with the file name when downloading thanks to @Bnyro
13 | - fix: kill the app on pressing quit thanks to @Bnyro thanks to @Bnyro
14 | - fix: theme settings
15 | - fix: suppress DRM notice #1019
16 | - fix: profile icons - red for attached profiles #999
17 | - fix: Youtube videos in full screen mode cropped #1015
18 | - fix: Twitter-to-Nitter redirector matches some unrelated urls #1022
19 | - fix: & not escaped in search URL #959
20 | - fix: lint issues
21 | - new: circular progress - press to stop loading
22 | - new: Swedish translation
23 | - new: material dialogs in the preferences thanks to @Bnyro
24 | - new: monochrome icon for Android 13+ thanks to @Bnyro
25 | - new: custom redirects thanks to @Bnyro
26 | - new: Custom error pages thanks to @Bnyro
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/137.txt:
--------------------------------------------------------------------------------
1 | ### v 9.6
2 |
3 | - removed: redirection for Instagram
4 | - fix: Redirect error from YouTube #991
5 | - fix: loading images fit screen width
6 | - fix: cookie manager, when going back in history
7 | - fix: buttons not reachable on some dialogs
8 | - fix: Auth-request dialog
9 | - fix: download dialog
10 | - fix: startsite is now the wiki #997
11 | - fix: crash when open downloads, while default file manager not installed
12 | - fix: issues with the file name when downloading thanks to @Bnyro
13 | - fix: kill the app on pressing quit thanks to @Bnyro thanks to @Bnyro
14 | - fix: theme settings
15 | - fix: suppress DRM notice #1019
16 | - fix: profile icons - red for attached profiles #999
17 | - fix: Youtube videos in full screen mode cropped #1015
18 | - fix: Twitter-to-Nitter redirector matches some unrelated urls #1022
19 | - fix: & not escaped in search URL #959
20 | - fix: lint issues
21 | - new: circular progress - press to stop loading
22 | - new: Swedish translation
23 | - new: material dialogs in the preferences thanks to @Bnyro
24 | - new: monochrome icon for Android 13+ thanks to @Bnyro
25 | - new: custom redirects thanks to @Bnyro
26 | - new: Custom error pages thanks to @Bnyro
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 33
5 |
6 | compileOptions {
7 | sourceCompatibility JavaVersion.VERSION_1_8
8 | targetCompatibility JavaVersion.VERSION_1_8
9 | }
10 |
11 | defaultConfig {
12 | applicationId "de.baumann.browser"
13 | minSdkVersion 24
14 | targetSdkVersion 33
15 | versionCode 139
16 | versionName "9.11"
17 | multiDexEnabled true
18 | vectorDrawables.useSupportLibrary = true
19 | }
20 |
21 | buildTypes {
22 | release {
23 | minifyEnabled false
24 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
25 | }
26 | }
27 | lint {
28 | checkReleaseBuilds false
29 | disable 'MissingTranslation'
30 | }
31 | namespace 'de.baumann.browser'
32 |
33 | return void
34 | }
35 |
36 | dependencies {
37 | implementation 'androidx.appcompat:appcompat:1.6.1'
38 | implementation 'com.google.android.material:material:1.9.0-beta01'
39 | implementation 'androidx.preference:preference:1.2.0'
40 | implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
41 | implementation 'androidx.webkit:webkit:1.6.0'
42 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/custom_redirects_row.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
15 |
16 |
23 |
24 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/preference_backup.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 |
16 |
17 |
21 |
22 |
26 |
27 |
31 |
32 |
36 |
37 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
12 |
16 |
17 |
21 |
22 |
23 |
24 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/preference_delete.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
14 |
15 |
19 |
20 |
24 |
25 |
30 |
31 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_web.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/preference_setting.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
11 |
12 |
15 |
16 |
19 |
20 |
21 |
22 |
23 |
24 |
27 |
28 |
31 |
32 |
35 |
36 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/browser/BrowserContainer.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.browser;
2 |
3 | import java.util.LinkedList;
4 | import java.util.List;
5 |
6 | import de.baumann.browser.view.NinjaWebView;
7 |
8 | public class BrowserContainer {
9 | private static final List list = new LinkedList<>();
10 |
11 | public static AlbumController get(int index) {
12 | return list.get(index);
13 | }
14 |
15 | public synchronized static void add(AlbumController controller) {
16 | list.add(controller);
17 | }
18 |
19 | public synchronized static void add(AlbumController controller, int index) {
20 | list.add(index, controller);
21 | }
22 |
23 | public synchronized static void remove(AlbumController controller) {
24 | ((NinjaWebView) controller).destroy();
25 | list.remove(controller);
26 | }
27 |
28 | public static int indexOf(AlbumController controller) {
29 | return list.indexOf(controller);
30 | }
31 |
32 | public static List list() {
33 | return list;
34 | }
35 |
36 | public static int size() {
37 | return list.size();
38 | }
39 |
40 | public synchronized static void clear() {
41 | for (AlbumController albumController : list) {
42 | ((NinjaWebView) albumController).destroy();
43 | }
44 | list.clear();
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/database/RecordHelper.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.database;
2 |
3 | import android.content.Context;
4 | import android.database.sqlite.SQLiteDatabase;
5 | import android.database.sqlite.SQLiteOpenHelper;
6 |
7 | import de.baumann.browser.unit.RecordUnit;
8 |
9 | class RecordHelper extends SQLiteOpenHelper {
10 | private static final String DATABASE_NAME = "Ninja4.db";
11 | private static final int DATABASE_VERSION = 4;
12 |
13 | RecordHelper(Context context) {
14 | super(context, DATABASE_NAME, null, DATABASE_VERSION);
15 | }
16 |
17 | @Override
18 | public void onCreate(SQLiteDatabase database) {
19 | database.execSQL(RecordUnit.CREATE_HISTORY);
20 | database.execSQL(RecordUnit.CREATE_TRUSTED);
21 | database.execSQL(RecordUnit.CREATE_PROTECTED);
22 | database.execSQL(RecordUnit.CREATE_START);
23 | database.execSQL(RecordUnit.CREATE_BOOKMARK);
24 | database.execSQL(RecordUnit.CREATE_STANDARD);
25 | }
26 |
27 | // UPGRADE ATTENTION!!!
28 | @Override
29 | public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
30 | switch (oldVersion) {
31 | case 1:
32 | database.execSQL(RecordUnit.CREATE_BOOKMARK);
33 | case 2:
34 | database.execSQL(RecordUnit.CREATE_STANDARD);
35 | case 3:
36 | // database.execSQL(RecordUnit.CREATE_TAB);
37 | // we want all updates, so no break statement here...
38 | }
39 | }
40 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_monochrome.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/view/AdapterProfileList.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.view;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ArrayAdapter;
8 | import android.widget.TextView;
9 |
10 | import androidx.annotation.NonNull;
11 |
12 | import java.util.List;
13 |
14 | import de.baumann.browser.R;
15 |
16 | public class AdapterProfileList extends ArrayAdapter {
17 | private final Context context;
18 | private final int layoutResId;
19 | private final List list;
20 |
21 | public AdapterProfileList(Context context, List list) {
22 | super(context, R.layout.item_list, list);
23 | this.context = context;
24 | this.layoutResId = R.layout.item_list;
25 | this.list = list;
26 | }
27 |
28 | @SuppressWarnings("NullableProblems")
29 | @NonNull
30 | @Override
31 | public View getView(final int position, View convertView, @NonNull ViewGroup parent) {
32 | Holder holder;
33 | View view = convertView;
34 | if (view == null) {
35 | view = LayoutInflater.from(context).inflate(layoutResId, parent, false);
36 | holder = new Holder();
37 | holder.domain = view.findViewById(R.id.titleView);
38 | view.setTag(holder);
39 | } else {
40 | holder = (Holder) view.getTag();
41 | }
42 | holder.domain.setText(list.get(position));
43 | return view;
44 | }
45 |
46 | private static class Holder {
47 | TextView domain;
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/create_new_redirect.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
21 |
22 |
23 |
24 |
29 |
30 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/fragment/Fragment_settings_Profile.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.fragment;
2 |
3 | import android.content.Context;
4 | import android.content.SharedPreferences;
5 | import android.os.Bundle;
6 |
7 | import androidx.preference.PreferenceManager;
8 |
9 | import java.util.Objects;
10 |
11 | import de.baumann.browser.R;
12 | import de.baumann.browser.preferences.BasePreferenceFragment;
13 |
14 | public class Fragment_settings_Profile extends BasePreferenceFragment {
15 |
16 | @Override
17 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
18 | Context context = getContext();
19 | assert context != null;
20 |
21 | SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
22 | String profile = sp.getString("profileToEdit", "profileStandard");
23 |
24 | switch (Objects.requireNonNull(profile)) {
25 | case "profileStandard":
26 | setPreferencesFromResource(R.xml.preference_profile_standard, rootKey);
27 | PreferenceManager.setDefaultValues(context, R.xml.preference_profile_standard, false);
28 | break;
29 | case "profileTrusted":
30 | setPreferencesFromResource(R.xml.preference_profile_trusted, rootKey);
31 | PreferenceManager.setDefaultValues(context, R.xml.preference_profile_trusted, false);
32 | break;
33 | case "profileProtected":
34 | setPreferencesFromResource(R.xml.preference_profile_protected, rootKey);
35 | PreferenceManager.setDefaultValues(context, R.xml.preference_profile_protected, false);
36 | break;
37 | }
38 | }
39 | }
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/objects/CustomRedirectsHelper.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.objects;
2 |
3 | import android.content.Context;
4 | import android.content.SharedPreferences;
5 |
6 | import androidx.preference.PreferenceManager;
7 |
8 | import org.json.JSONArray;
9 | import org.json.JSONException;
10 | import org.json.JSONObject;
11 |
12 | import java.util.ArrayList;
13 |
14 | public class CustomRedirectsHelper {
15 |
16 | public final static String CUSTOM_REDIRECTS_KEY = "customRedirects";
17 |
18 | public static ArrayList getRedirects(SharedPreferences preferences) throws JSONException {
19 | ArrayList redirects = new ArrayList<>();
20 | String redirectsPref = preferences.getString(CUSTOM_REDIRECTS_KEY, "[]");
21 |
22 | JSONArray array = new JSONArray(redirectsPref);
23 | for (int i = 0; i < array.length(); i++) {
24 | JSONObject redirect = array.getJSONObject(i);
25 | String source = redirect.getString("source");
26 | String target = redirect.getString("target");
27 | redirects.add(new CustomRedirect(source, target));
28 | }
29 | return redirects;
30 | }
31 |
32 | public static void saveRedirects(Context context, ArrayList redirects) throws JSONException {
33 | SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
34 |
35 | JSONArray array = new JSONArray();
36 | for (int i = 0; i < redirects.size(); i++) {
37 | CustomRedirect redirect = redirects.get(i);
38 | JSONObject object = new JSONObject();
39 | object.put("source", redirect.getSource());
40 | object.put("target", redirect.getTarget());
41 | array.put(object);
42 | }
43 |
44 | preferences.edit().putString(CUSTOM_REDIRECTS_KEY, array.toString()).apply();
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/preference_general.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
7 |
8 |
12 |
13 |
19 |
20 |
21 |
22 |
24 |
25 |
31 |
32 |
38 |
39 |
40 |
41 |
43 |
44 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/browser/List_trusted.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.browser;
2 |
3 | import android.content.Context;
4 |
5 | import java.util.ArrayList;
6 | import java.util.List;
7 |
8 | import de.baumann.browser.database.RecordAction;
9 | import de.baumann.browser.unit.HelperUnit;
10 | import de.baumann.browser.unit.RecordUnit;
11 |
12 | public class List_trusted {
13 |
14 | private static final List listTrusted = new ArrayList<>();
15 | private final Context context;
16 |
17 | public List_trusted(Context context) {
18 | this.context = context;
19 | loadDomains(context);
20 | }
21 |
22 | private synchronized static void loadDomains(Context context) {
23 | RecordAction action = new RecordAction(context);
24 | action.open(false);
25 | listTrusted.clear();
26 | listTrusted.addAll(action.listDomains(RecordUnit.TABLE_TRUSTED));
27 | action.close();
28 | }
29 |
30 | public boolean isWhite(String url) {
31 | for (String domain : listTrusted) {
32 | if (url != null && HelperUnit.domain(url).equals(domain)) {
33 | return true;
34 | }
35 | }
36 | return false;
37 | }
38 |
39 | public synchronized void addDomain(String domain) {
40 | RecordAction action = new RecordAction(context);
41 | action.open(true);
42 | action.addDomain(domain, RecordUnit.TABLE_TRUSTED);
43 | action.close();
44 | listTrusted.add(domain);
45 | }
46 |
47 | public synchronized void removeDomain(String domain) {
48 | RecordAction action = new RecordAction(context);
49 | action.open(true);
50 | action.deleteDomain(domain, RecordUnit.TABLE_TRUSTED);
51 | action.close();
52 | listTrusted.remove(domain);
53 | }
54 |
55 | public synchronized void clearDomains() {
56 | RecordAction action = new RecordAction(context);
57 | action.open(true);
58 | action.clearTable(RecordUnit.TABLE_TRUSTED);
59 | action.close();
60 | listTrusted.clear();
61 | }
62 | }
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/browser/List_standard.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.browser;
2 |
3 | import android.content.Context;
4 |
5 | import java.util.ArrayList;
6 | import java.util.List;
7 |
8 | import de.baumann.browser.database.RecordAction;
9 | import de.baumann.browser.unit.HelperUnit;
10 | import de.baumann.browser.unit.RecordUnit;
11 |
12 | public class List_standard {
13 |
14 | private static final List listStandard = new ArrayList<>();
15 | private final Context context;
16 |
17 | public List_standard(Context context) {
18 | this.context = context;
19 | loadDomains(context);
20 | }
21 |
22 | private synchronized static void loadDomains(Context context) {
23 | RecordAction action = new RecordAction(context);
24 | action.open(false);
25 | listStandard.clear();
26 | listStandard.addAll(action.listDomains(RecordUnit.TABLE_STANDARD));
27 | action.close();
28 | }
29 |
30 | public boolean isWhite(String url) {
31 | for (String domain : listStandard) {
32 | if (url != null && HelperUnit.domain(url).equals(domain)) {
33 | return true;
34 | }
35 | }
36 | return false;
37 | }
38 |
39 | public synchronized void addDomain(String domain) {
40 | RecordAction action = new RecordAction(context);
41 | action.open(true);
42 | action.addDomain(domain, RecordUnit.TABLE_STANDARD);
43 | action.close();
44 | listStandard.add(domain);
45 | }
46 |
47 | public synchronized void removeDomain(String domain) {
48 | RecordAction action = new RecordAction(context);
49 | action.open(true);
50 | action.deleteDomain(domain, RecordUnit.TABLE_STANDARD);
51 | action.close();
52 | listStandard.remove(domain);
53 | }
54 |
55 | public synchronized void clearDomains() {
56 | RecordAction action = new RecordAction(context);
57 | action.open(true);
58 | action.clearTable(RecordUnit.TABLE_STANDARD);
59 | action.close();
60 | listStandard.clear();
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/browser/List_protected.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.browser;
2 |
3 | import android.content.Context;
4 |
5 | import java.util.ArrayList;
6 | import java.util.List;
7 |
8 | import de.baumann.browser.database.RecordAction;
9 | import de.baumann.browser.unit.HelperUnit;
10 | import de.baumann.browser.unit.RecordUnit;
11 |
12 | public class List_protected {
13 |
14 | private static final List listProtected = new ArrayList<>();
15 | private final Context context;
16 |
17 | public List_protected(Context context) {
18 | this.context = context;
19 | loadDomains(context);
20 | }
21 |
22 | private synchronized static void loadDomains(Context context) {
23 | RecordAction action = new RecordAction(context);
24 | action.open(false);
25 | listProtected.clear();
26 | listProtected.addAll(action.listDomains(RecordUnit.TABLE_PROTECTED));
27 | action.close();
28 | }
29 |
30 | public boolean isWhite(String url) {
31 | for (String domain : listProtected) {
32 | if (url != null && HelperUnit.domain(url).equals(domain)) {
33 | return true;
34 | }
35 | }
36 | return false;
37 | }
38 |
39 | public synchronized void addDomain(String domain) {
40 | RecordAction action = new RecordAction(context);
41 | action.open(true);
42 | action.addDomain(domain, RecordUnit.TABLE_PROTECTED);
43 | action.close();
44 | listProtected.add(domain);
45 | }
46 |
47 | public synchronized void removeDomain(String domain) {
48 | RecordAction action = new RecordAction(context);
49 | action.open(true);
50 | action.deleteDomain(domain, RecordUnit.TABLE_PROTECTED);
51 | action.close();
52 | listProtected.remove(domain);
53 | }
54 |
55 | public synchronized void clearDomains() {
56 | RecordAction action = new RecordAction(context);
57 | action.open(true);
58 | action.clearTable(RecordUnit.TABLE_PROTECTED);
59 | action.close();
60 | listProtected.clear();
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
20 |
21 |
31 |
32 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/fragment/Fragment_settings_Delete.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.fragment;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import android.content.SharedPreferences;
6 | import android.os.Bundle;
7 |
8 | import androidx.appcompat.app.AlertDialog;
9 | import androidx.preference.Preference;
10 |
11 | import com.google.android.material.dialog.MaterialAlertDialogBuilder;
12 |
13 | import de.baumann.browser.R;
14 | import de.baumann.browser.preferences.BasePreferenceFragment;
15 | import de.baumann.browser.unit.HelperUnit;
16 |
17 | public class Fragment_settings_Delete extends BasePreferenceFragment {
18 |
19 | @Override
20 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
21 |
22 | setPreferencesFromResource(R.xml.preference_delete, rootKey);
23 | Activity activity = getActivity();
24 | assert activity != null;
25 | Context context = getContext();
26 | assert context != null;
27 |
28 | Preference sp_deleteDatabase = findPreference("sp_deleteDatabase");
29 | assert sp_deleteDatabase != null;
30 | sp_deleteDatabase.setOnPreferenceClickListener(preference -> {
31 | final SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
32 | MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(activity);
33 | builder.setIcon(R.drawable.icon_delete);
34 | builder.setTitle(R.string.menu_delete);
35 | builder.setMessage(R.string.hint_database);
36 | builder.setPositiveButton(R.string.app_ok, (dialog, whichButton) -> {
37 | dialog.cancel();
38 | activity.deleteDatabase("Ninja4.db");
39 | activity.deleteDatabase("faviconView.db");
40 | assert sp != null;
41 | sp.edit().putInt("restart_changed", 1).apply();
42 | activity.finish();
43 | });
44 | builder.setNegativeButton(R.string.app_cancel, (dialog, whichButton) -> dialog.cancel());
45 | AlertDialog dialog = builder.create();
46 | dialog.show();
47 | HelperUnit.setupDialog(context, dialog);
48 | return false;
49 | });
50 | }
51 | }
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/view/AdapterCustomRedirect.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.view;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.ImageView;
7 | import android.widget.TextView;
8 |
9 | import androidx.annotation.NonNull;
10 | import androidx.recyclerview.widget.RecyclerView;
11 |
12 | import java.util.ArrayList;
13 |
14 | import de.baumann.browser.R;
15 | import de.baumann.browser.objects.CustomRedirect;
16 |
17 | public class AdapterCustomRedirect extends RecyclerView.Adapter {
18 | final private ArrayList redirects;
19 |
20 | public AdapterCustomRedirect(ArrayList redirects) {
21 | super();
22 | this.redirects = redirects;
23 | }
24 |
25 | @NonNull
26 | @Override
27 | public RedirectsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
28 | View view = LayoutInflater.from(parent.getContext())
29 | .inflate(R.layout.custom_redirects_row, parent, false);
30 |
31 | return new RedirectsViewHolder(view);
32 |
33 | }
34 |
35 | @Override
36 | public void onBindViewHolder(@NonNull RedirectsViewHolder holder, int position) {
37 | CustomRedirect current = redirects.get(position);
38 | TextView source = holder.itemView.findViewById(R.id.redirect_source);
39 | TextView target = holder.itemView.findViewById(R.id.redirect_target);
40 | ImageView remove = holder.itemView.findViewById(R.id.remove_redirect);
41 | source.setText(current.getSource());
42 | target.setText(current.getTarget());
43 | remove.setOnClickListener((iV) -> {
44 | redirects.remove(position);
45 | notifyItemRemoved(position);
46 | notifyItemRangeChanged(position, getItemCount());
47 | });
48 | }
49 |
50 | @Override
51 | public int getItemCount() {
52 | return redirects.size();
53 | }
54 |
55 | public ArrayList getRedirects() {
56 | return redirects;
57 | }
58 |
59 | public void addRedirect(CustomRedirect redirect) {
60 | redirects.add(redirect);
61 | notifyItemInserted(getItemCount() - 1);
62 | }
63 | }
64 |
65 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_settings_delete.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
17 |
18 |
22 |
23 |
24 |
25 |
28 |
29 |
33 |
34 |
38 |
39 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_fingerprint.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/database/Record.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.database;
2 |
3 | public class Record {
4 |
5 | private final int ordinal;
6 | private Boolean isDesktopMode;
7 | private Boolean isNightMode;
8 | private long iconColor;
9 | private String title;
10 | private String url;
11 | private long time;
12 | private int type; //0 History, 1 Start site, 2 Bookmark
13 |
14 | public Record() {
15 | this.title = null;
16 | this.url = null;
17 | this.time = 0L;
18 | this.ordinal = -1;
19 | this.type = -1;
20 | this.isDesktopMode = null;
21 | this.iconColor = 0L;
22 | }
23 |
24 | public Record(String title, String url, long time, int ordinal, int type, Boolean DesktopMode, Boolean NightMode, long iconColor) {
25 | this.title = title;
26 | this.url = url;
27 | this.time = time;
28 | this.ordinal = ordinal;
29 | this.type = type;
30 | this.isDesktopMode = DesktopMode;
31 | this.isNightMode = NightMode;
32 | this.iconColor = iconColor;
33 | }
34 |
35 | public long getIconColor() {
36 | return iconColor;
37 | }
38 |
39 | public void setIconColor(long iconColor) {
40 | this.iconColor = iconColor;
41 | }
42 |
43 | public Boolean getDesktopMode() {
44 | return isDesktopMode;
45 | }
46 |
47 | public void setDesktopMode(Boolean desktopMode) {
48 | isDesktopMode = desktopMode;
49 | }
50 |
51 | public Boolean getNightMode() {
52 | return isNightMode;
53 | }
54 |
55 | public void setNightMode(Boolean desktopMode) {
56 | isNightMode = desktopMode;
57 | }
58 |
59 | public String getTitle() {
60 | return title;
61 | }
62 |
63 | public void setTitle(String title) {
64 | this.title = title;
65 | }
66 |
67 | public String getURL() {
68 | return url;
69 | }
70 |
71 | public void setURL(String url) {
72 | this.url = url;
73 | }
74 |
75 | public long getTime() {
76 | return time;
77 | }
78 |
79 | public void setTime(long time) {
80 | this.time = time;
81 | }
82 |
83 | int getOrdinal() {
84 | return ordinal;
85 | }
86 |
87 | public int getType() {
88 | return type;
89 | }
90 |
91 | public void setType(int type) {
92 | this.type = type;
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/activity/Settings_UI.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.activity;
2 |
3 | import android.net.Uri;
4 | import android.os.Bundle;
5 | import android.view.Menu;
6 | import android.view.MenuItem;
7 | import android.view.Window;
8 | import android.view.WindowManager;
9 |
10 | import androidx.appcompat.app.AppCompatActivity;
11 | import androidx.appcompat.app.AppCompatDelegate;
12 | import androidx.appcompat.widget.Toolbar;
13 | import androidx.core.content.ContextCompat;
14 |
15 | import java.util.Objects;
16 |
17 | import de.baumann.browser.R;
18 | import de.baumann.browser.fragment.Fragment_settings_UI;
19 | import de.baumann.browser.unit.BrowserUnit;
20 | import de.baumann.browser.unit.HelperUnit;
21 |
22 | public class Settings_UI extends AppCompatActivity {
23 |
24 | @Override
25 | public void onCreate(Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 |
28 | if (getSupportActionBar() != null) getSupportActionBar().hide();
29 | Window window = this.getWindow();
30 | window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
31 | window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
32 | window.setStatusBarColor(ContextCompat.getColor(this, R.color.md_theme_light_onBackground));
33 |
34 | AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
35 | HelperUnit.initTheme(this);
36 | setContentView(R.layout.activity_settings);
37 | Toolbar toolbar = findViewById(R.id.toolbar);
38 | setSupportActionBar(toolbar);
39 | Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
40 |
41 | getSupportFragmentManager()
42 | .beginTransaction()
43 | .replace(R.id.content_frame, new Fragment_settings_UI())
44 | .commit();
45 | }
46 |
47 | @Override
48 | public boolean onCreateOptionsMenu(Menu menu) {
49 | getMenuInflater().inflate(R.menu.menu_help, menu);
50 | return super.onCreateOptionsMenu(menu);
51 | }
52 |
53 | @Override
54 | public boolean onOptionsItemSelected(MenuItem menuItem) {
55 | if (menuItem.getItemId() == android.R.id.home) finish();
56 | if (menuItem.getItemId() == R.id.menu_help) {
57 | Uri webpage = Uri.parse("https://github.com/scoute-dich/browser/wiki/Behavior-UI");
58 | BrowserUnit.intentURL(this, webpage);
59 | }
60 | return true;
61 | }
62 | }
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/activity/Settings_Backup.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.activity;
2 |
3 | import android.net.Uri;
4 | import android.os.Bundle;
5 | import android.view.Menu;
6 | import android.view.MenuItem;
7 | import android.view.Window;
8 | import android.view.WindowManager;
9 |
10 | import androidx.appcompat.app.AppCompatActivity;
11 | import androidx.appcompat.app.AppCompatDelegate;
12 | import androidx.appcompat.widget.Toolbar;
13 | import androidx.core.content.ContextCompat;
14 |
15 | import java.util.Objects;
16 |
17 | import de.baumann.browser.R;
18 | import de.baumann.browser.fragment.Fragment_settings_Backup;
19 | import de.baumann.browser.unit.BrowserUnit;
20 | import de.baumann.browser.unit.HelperUnit;
21 |
22 | public class Settings_Backup extends AppCompatActivity {
23 |
24 | @Override
25 | public void onCreate(Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 |
28 | if (getSupportActionBar() != null) getSupportActionBar().hide();
29 | Window window = this.getWindow();
30 | window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
31 | window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
32 | window.setStatusBarColor(ContextCompat.getColor(this, R.color.md_theme_light_onBackground));
33 |
34 | AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
35 | HelperUnit.initTheme(this);
36 | setContentView(R.layout.activity_settings_backup);
37 | Toolbar toolbar = findViewById(R.id.toolbar);
38 | setSupportActionBar(toolbar);
39 | Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
40 |
41 | getSupportFragmentManager()
42 | .beginTransaction()
43 | .replace(R.id.content_frame, new Fragment_settings_Backup())
44 | .commit();
45 | }
46 |
47 | @Override
48 | public boolean onCreateOptionsMenu(Menu menu) {
49 | getMenuInflater().inflate(R.menu.menu_help, menu);
50 | return super.onCreateOptionsMenu(menu);
51 | }
52 |
53 | @Override
54 | public boolean onOptionsItemSelected(MenuItem menuItem) {
55 | if (menuItem.getItemId() == android.R.id.home) finish();
56 | if (menuItem.getItemId() == R.id.menu_help) {
57 | Uri webpage = Uri.parse("https://github.com/scoute-dich/browser/wiki/Backup");
58 | BrowserUnit.intentURL(this, webpage);
59 | }
60 | return true;
61 | }
62 | }
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/activity/Settings_Activity.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.activity;
2 |
3 | import android.net.Uri;
4 | import android.os.Bundle;
5 | import android.view.Menu;
6 | import android.view.MenuItem;
7 | import android.view.Window;
8 | import android.view.WindowManager;
9 |
10 | import androidx.appcompat.app.AppCompatActivity;
11 | import androidx.appcompat.app.AppCompatDelegate;
12 | import androidx.appcompat.widget.Toolbar;
13 | import androidx.core.content.ContextCompat;
14 |
15 | import java.util.Objects;
16 |
17 | import de.baumann.browser.R;
18 | import de.baumann.browser.fragment.Fragment_settings;
19 | import de.baumann.browser.unit.BrowserUnit;
20 | import de.baumann.browser.unit.HelperUnit;
21 |
22 | public class Settings_Activity extends AppCompatActivity {
23 |
24 | @Override
25 | public void onCreate(Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 |
28 | if (getSupportActionBar() != null) getSupportActionBar().hide();
29 | Window window = this.getWindow();
30 | window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
31 | window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
32 | window.setStatusBarColor(ContextCompat.getColor(this, R.color.md_theme_light_onBackground));
33 |
34 | AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
35 | HelperUnit.initTheme(this);
36 | setContentView(R.layout.activity_settings);
37 | Toolbar toolbar = findViewById(R.id.toolbar);
38 | setSupportActionBar(toolbar);
39 | Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
40 |
41 | getSupportFragmentManager()
42 | .beginTransaction()
43 | .replace(R.id.content_frame, new Fragment_settings())
44 | .commit();
45 | }
46 |
47 | @Override
48 | public boolean onCreateOptionsMenu(Menu menu) {
49 | getMenuInflater().inflate(R.menu.menu_help, menu);
50 | return super.onCreateOptionsMenu(menu);
51 | }
52 |
53 | @Override
54 | public boolean onOptionsItemSelected(MenuItem menuItem) {
55 | if (menuItem.getItemId() == android.R.id.home) finish();
56 | else if (menuItem.getItemId() == R.id.menu_help) {
57 | Uri webpage = Uri.parse("https://github.com/scoute-dich/browser/wiki/Settings-(Main-screen)");
58 | BrowserUnit.intentURL(this, webpage);
59 | }
60 | return true;
61 | }
62 | }
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/activity/Settings_Filter.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.activity;
2 |
3 | import android.net.Uri;
4 | import android.os.Bundle;
5 | import android.view.Menu;
6 | import android.view.MenuItem;
7 | import android.view.Window;
8 | import android.view.WindowManager;
9 |
10 | import androidx.appcompat.app.AppCompatActivity;
11 | import androidx.appcompat.app.AppCompatDelegate;
12 | import androidx.appcompat.widget.Toolbar;
13 | import androidx.core.content.ContextCompat;
14 |
15 | import java.util.Objects;
16 |
17 | import de.baumann.browser.R;
18 | import de.baumann.browser.fragment.Fragment_settings_Filter;
19 | import de.baumann.browser.unit.BrowserUnit;
20 | import de.baumann.browser.unit.HelperUnit;
21 |
22 | public class Settings_Filter extends AppCompatActivity {
23 |
24 | @Override
25 | public void onCreate(Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 |
28 | if (getSupportActionBar() != null) getSupportActionBar().hide();
29 | Window window = this.getWindow();
30 | window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
31 | window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
32 | window.setStatusBarColor(ContextCompat.getColor(this, R.color.md_theme_light_onBackground));
33 |
34 | AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
35 | HelperUnit.initTheme(this);
36 | setContentView(R.layout.activity_settings);
37 | Toolbar toolbar = findViewById(R.id.toolbar);
38 | setSupportActionBar(toolbar);
39 | Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
40 |
41 | getSupportFragmentManager()
42 | .beginTransaction()
43 | .replace(R.id.content_frame, new Fragment_settings_Filter())
44 | .commit();
45 | }
46 |
47 | @Override
48 | public boolean onCreateOptionsMenu(Menu menu) {
49 | getMenuInflater().inflate(R.menu.menu_help, menu);
50 | return super.onCreateOptionsMenu(menu);
51 | }
52 |
53 | @Override
54 | public boolean onOptionsItemSelected(MenuItem menuItem) {
55 | if (menuItem.getItemId() == android.R.id.home) finish();
56 | if (menuItem.getItemId() == R.id.menu_help) {
57 | Uri webpage = Uri.parse("https://github.com/scoute-dich/browser/wiki/Bookmark-filter");
58 | BrowserUnit.intentURL(this, webpage);
59 | }
60 | return true;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/activity/Settings_General.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.activity;
2 |
3 | import android.net.Uri;
4 | import android.os.Bundle;
5 | import android.view.Menu;
6 | import android.view.MenuItem;
7 | import android.view.Window;
8 | import android.view.WindowManager;
9 |
10 | import androidx.appcompat.app.AppCompatActivity;
11 | import androidx.appcompat.app.AppCompatDelegate;
12 | import androidx.appcompat.widget.Toolbar;
13 | import androidx.core.content.ContextCompat;
14 |
15 | import java.util.Objects;
16 |
17 | import de.baumann.browser.R;
18 | import de.baumann.browser.fragment.Fragment_settings_General;
19 | import de.baumann.browser.unit.BrowserUnit;
20 | import de.baumann.browser.unit.HelperUnit;
21 |
22 | public class Settings_General extends AppCompatActivity {
23 |
24 | @Override
25 | public void onCreate(Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 |
28 | if (getSupportActionBar() != null) getSupportActionBar().hide();
29 | Window window = this.getWindow();
30 | window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
31 | window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
32 | window.setStatusBarColor(ContextCompat.getColor(this, R.color.md_theme_light_onBackground));
33 |
34 | AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
35 | HelperUnit.initTheme(this);
36 | setContentView(R.layout.activity_settings);
37 | Toolbar toolbar = findViewById(R.id.toolbar);
38 | setSupportActionBar(toolbar);
39 | Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
40 |
41 | getSupportFragmentManager()
42 | .beginTransaction()
43 | .replace(R.id.content_frame, new Fragment_settings_General())
44 | .commit();
45 | }
46 |
47 | @Override
48 | public boolean onCreateOptionsMenu(Menu menu) {
49 | getMenuInflater().inflate(R.menu.menu_help, menu);
50 | return super.onCreateOptionsMenu(menu);
51 | }
52 |
53 | @Override
54 | public boolean onOptionsItemSelected(MenuItem menuItem) {
55 | if (menuItem.getItemId() == android.R.id.home) finish();
56 | if (menuItem.getItemId() == R.id.menu_help) {
57 | Uri webpage = Uri.parse("https://github.com/scoute-dich/browser/wiki/Privacy");
58 | BrowserUnit.intentURL(this, webpage);
59 | }
60 | return true;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/activity/Settings_Gesture.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.activity;
2 |
3 | import android.net.Uri;
4 | import android.os.Bundle;
5 | import android.view.Menu;
6 | import android.view.MenuItem;
7 | import android.view.Window;
8 | import android.view.WindowManager;
9 |
10 | import androidx.appcompat.app.AppCompatActivity;
11 | import androidx.appcompat.app.AppCompatDelegate;
12 | import androidx.appcompat.widget.Toolbar;
13 | import androidx.core.content.ContextCompat;
14 |
15 | import java.util.Objects;
16 |
17 | import de.baumann.browser.R;
18 | import de.baumann.browser.fragment.Fragment_settings_Gesture;
19 | import de.baumann.browser.unit.BrowserUnit;
20 | import de.baumann.browser.unit.HelperUnit;
21 |
22 | public class Settings_Gesture extends AppCompatActivity {
23 |
24 | @Override
25 | public void onCreate(Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 |
28 | if (getSupportActionBar() != null) getSupportActionBar().hide();
29 | Window window = this.getWindow();
30 | window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
31 | window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
32 | window.setStatusBarColor(ContextCompat.getColor(this, R.color.md_theme_light_onBackground));
33 |
34 | AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
35 | HelperUnit.initTheme(this);
36 | setContentView(R.layout.activity_settings);
37 | Toolbar toolbar = findViewById(R.id.toolbar);
38 | setSupportActionBar(toolbar);
39 | Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
40 |
41 | getSupportFragmentManager()
42 | .beginTransaction()
43 | .replace(R.id.content_frame, new Fragment_settings_Gesture())
44 | .commit();
45 | }
46 |
47 | @Override
48 | public boolean onCreateOptionsMenu(Menu menu) {
49 | getMenuInflater().inflate(R.menu.menu_help, menu);
50 | return super.onCreateOptionsMenu(menu);
51 | }
52 |
53 | @Override
54 | public boolean onOptionsItemSelected(MenuItem menuItem) {
55 | if (menuItem.getItemId() == android.R.id.home) finish();
56 | if (menuItem.getItemId() == R.id.menu_help) {
57 | Uri webpage = Uri.parse("https://github.com/scoute-dich/browser/wiki/Gestures");
58 | BrowserUnit.intentURL(this, webpage);
59 | }
60 | return true;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/activity/Settings_PrivacyActivity.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.activity;
2 |
3 | import android.net.Uri;
4 | import android.os.Bundle;
5 | import android.view.Menu;
6 | import android.view.MenuItem;
7 | import android.view.Window;
8 | import android.view.WindowManager;
9 |
10 | import androidx.appcompat.app.AppCompatActivity;
11 | import androidx.appcompat.app.AppCompatDelegate;
12 | import androidx.appcompat.widget.Toolbar;
13 | import androidx.core.content.ContextCompat;
14 |
15 | import java.util.Objects;
16 |
17 | import de.baumann.browser.R;
18 | import de.baumann.browser.fragment.Fragment_settings_Privacy;
19 | import de.baumann.browser.unit.BrowserUnit;
20 | import de.baumann.browser.unit.HelperUnit;
21 |
22 | public class Settings_PrivacyActivity extends AppCompatActivity {
23 |
24 | @Override
25 | public void onCreate(Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 |
28 | if (getSupportActionBar() != null) getSupportActionBar().hide();
29 | Window window = this.getWindow();
30 | window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
31 | window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
32 | window.setStatusBarColor(ContextCompat.getColor(this, R.color.md_theme_light_onBackground));
33 |
34 | AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
35 | HelperUnit.initTheme(this);
36 | setContentView(R.layout.activity_settings);
37 | Toolbar toolbar = findViewById(R.id.toolbar);
38 | setSupportActionBar(toolbar);
39 | Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
40 |
41 | getSupportFragmentManager()
42 | .beginTransaction()
43 | .replace(R.id.content_frame, new Fragment_settings_Privacy())
44 | .commit();
45 | }
46 |
47 | @Override
48 | public boolean onCreateOptionsMenu(Menu menu) {
49 | getMenuInflater().inflate(R.menu.menu_help, menu);
50 | return super.onCreateOptionsMenu(menu);
51 | }
52 |
53 | @Override
54 | public boolean onOptionsItemSelected(MenuItem menuItem) {
55 | if (menuItem.getItemId() == android.R.id.home) finish();
56 | if (menuItem.getItemId() == R.id.menu_help) {
57 | Uri webpage = Uri.parse("https://github.com/scoute-dich/browser/wiki/Privacy");
58 | BrowserUnit.intentURL(this, webpage);
59 | }
60 | return true;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | 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, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
6 |
7 | ## Our Standards
8 |
9 | Examples of behavior that contributes to creating a positive environment include:
10 |
11 | * Using welcoming and inclusive language
12 | * Being respectful of differing viewpoints and experiences
13 | * Gracefully accepting constructive criticism
14 | * Focusing on what is best for the community
15 | * Showing empathy towards other community members
16 |
17 | Examples of unacceptable behavior by participants include:
18 |
19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances
20 | * Trolling, insulting/derogatory comments, and personal or political attacks (No NAZIs, nowhere.)
21 | * Public or private harassment
22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission
23 | * Other conduct which could reasonably be considered inappropriate in a professional setting
24 |
25 | ## Our Responsibilities
26 |
27 | 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.
28 |
29 | 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.
30 |
31 | ## Scope
32 |
33 | 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.
34 |
35 | ## Attribution
36 |
37 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
38 |
39 | [homepage]: http://contributor-covenant.org
40 | [version]: http://contributor-covenant.org/version/1/4/
41 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/unit/RecordUnit.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.unit;
2 |
3 | public class RecordUnit {
4 |
5 | /*
6 |
7 | Since FOSS Browser switched from whitelists to profiles to manage privacy settings,
8 | there is a lot of legacy code concerning the database.
9 |
10 | old whitelist -> new profile
11 |
12 | "JAVASCRIPT" whitelist -> Trusted websites
13 | "REMOTE" whitelist -> Standard websites
14 | "TABLE_PROTECTED" whitelist -> Protected websites
15 |
16 | */
17 |
18 | public static final String TABLE_START = "GRID";
19 | public static final String TABLE_BOOKMARK = "BOOKAMRK";
20 | public static final String TABLE_HISTORY = "HISTORY";
21 |
22 | public static final String TABLE_TRUSTED = "JAVASCRIPT";
23 | public static final String TABLE_PROTECTED = "COOKIE";
24 | public static final String TABLE_STANDARD = "REMOTE";
25 |
26 | public static final String COLUMN_TITLE = "TITLE";
27 | public static final String COLUMN_URL = "URL";
28 | public static final String COLUMN_TIME = "TIME";
29 | public static final String COLUMN_DOMAIN = "DOMAIN";
30 | public static final String COLUMN_FILENAME = "FILENAME";
31 | public static final String COLUMN_ORDINAL = "ORDINAL";
32 |
33 | public static final String CREATE_BOOKMARK = "CREATE TABLE "
34 | + TABLE_BOOKMARK
35 | + " ("
36 | + " " + COLUMN_TITLE + " text,"
37 | + " " + COLUMN_URL + " text,"
38 | + " " + COLUMN_TIME + " integer"
39 | + ")";
40 |
41 | public static final String CREATE_HISTORY = "CREATE TABLE "
42 | + TABLE_HISTORY
43 | + " ("
44 | + " " + COLUMN_TITLE + " text,"
45 | + " " + COLUMN_URL + " text,"
46 | + " " + COLUMN_TIME + " integer"
47 | + ")";
48 |
49 | public static final String CREATE_TRUSTED = "CREATE TABLE "
50 | + TABLE_TRUSTED
51 | + " ("
52 | + " " + COLUMN_DOMAIN + " text"
53 | + ")";
54 |
55 | public static final String CREATE_PROTECTED = "CREATE TABLE "
56 | + TABLE_PROTECTED
57 | + " ("
58 | + " " + COLUMN_DOMAIN + " text"
59 | + ")";
60 |
61 | public static final String CREATE_STANDARD = "CREATE TABLE "
62 | + TABLE_STANDARD
63 | + " ("
64 | + " " + COLUMN_DOMAIN + " text"
65 | + ")";
66 |
67 | public static final String CREATE_START = "CREATE TABLE "
68 | + TABLE_START
69 | + " ("
70 | + " " + COLUMN_TITLE + " text,"
71 | + " " + COLUMN_URL + " text,"
72 | + " " + COLUMN_FILENAME + " text,"
73 | + " " + COLUMN_ORDINAL + " integer"
74 | + ")";
75 | }
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/fragment/Fragment_settings_Gesture.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.fragment;
2 |
3 | import android.content.Context;
4 | import android.content.SharedPreferences;
5 | import android.os.Bundle;
6 |
7 | import androidx.preference.EditTextPreference;
8 | import androidx.preference.ListPreference;
9 | import androidx.preference.Preference;
10 | import androidx.preference.PreferenceGroup;
11 | import androidx.preference.PreferenceManager;
12 |
13 | import java.util.Objects;
14 |
15 | import de.baumann.browser.R;
16 | import de.baumann.browser.preferences.BasePreferenceFragment;
17 |
18 | public class Fragment_settings_Gesture extends BasePreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
19 |
20 | @Override
21 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
22 |
23 | setPreferencesFromResource(R.xml.preference_gesture, rootKey);
24 | Context context = getContext();
25 | assert context != null;
26 |
27 | PreferenceManager.setDefaultValues(context, R.xml.preference_gesture, false);
28 | initSummary(getPreferenceScreen());
29 | }
30 |
31 | private void initSummary(Preference p) {
32 | if (p instanceof PreferenceGroup) {
33 | PreferenceGroup pGrp = (PreferenceGroup) p;
34 | for (int i = 0; i < pGrp.getPreferenceCount(); i++) {
35 | initSummary(pGrp.getPreference(i));
36 | }
37 | } else {
38 | updatePrefSummary(p);
39 | }
40 | }
41 |
42 | private void updatePrefSummary(Preference p) {
43 | if (p instanceof ListPreference) {
44 | ListPreference listPref = (ListPreference) p;
45 | p.setSummary(listPref.getEntry());
46 | }
47 | if (p instanceof EditTextPreference) {
48 | EditTextPreference editTextPref = (EditTextPreference) p;
49 | if (Objects.requireNonNull(p.getTitle()).toString().toLowerCase().contains("password")) {
50 | p.setSummary("******");
51 | } else {
52 | p.setSummary(editTextPref.getText());
53 | }
54 | }
55 | }
56 |
57 | @Override
58 | public void onResume() {
59 | super.onResume();
60 | Objects.requireNonNull(getPreferenceScreen().getSharedPreferences()).registerOnSharedPreferenceChangeListener(this);
61 | }
62 |
63 | @Override
64 | public void onPause() {
65 | super.onPause();
66 | Objects.requireNonNull(getPreferenceScreen().getSharedPreferences()).unregisterOnSharedPreferenceChangeListener(this);
67 | }
68 |
69 | @Override
70 | public void onSharedPreferenceChanged(final SharedPreferences sp, String key) {
71 | if (key.equals("sp_gestures_use") || key.equals("sp_gesture_action")) {
72 | sp.edit().putInt("restart_changed", 1).apply();
73 | }
74 | updatePrefSummary(findPreference(key));
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/view/SwipeTouchListener.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.view;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.content.Context;
5 | import android.view.GestureDetector;
6 | import android.view.MotionEvent;
7 | import android.view.View;
8 | import android.view.View.OnTouchListener;
9 |
10 |
11 | @SuppressWarnings("WeakerAccess")
12 | public class SwipeTouchListener implements OnTouchListener {
13 |
14 | private final GestureDetector gestureDetector;
15 |
16 | public SwipeTouchListener(Context ctx) {
17 | gestureDetector = new GestureDetector(ctx, new GestureListener());
18 | }
19 |
20 | @SuppressLint("ClickableViewAccessibility")
21 | @Override
22 | public boolean onTouch(View v, MotionEvent event) {
23 | return gestureDetector.onTouchEvent(event);
24 | }
25 |
26 | // ↓ do not remove, needed for swipe listener of the "navigation button"
27 | public void onSwipeRight() {
28 | }
29 |
30 | public void onSwipeLeft() {
31 | }
32 |
33 | public void onSwipeTop() {
34 | }
35 |
36 | public void onSwipeBottom() {
37 | }
38 |
39 | @SuppressWarnings("NullableProblems")
40 | private final class GestureListener extends GestureDetector.SimpleOnGestureListener {
41 |
42 | private static final int SWIPE_THRESHOLD = 100;
43 | private static final int SWIPE_VELOCITY_THRESHOLD = 100;
44 |
45 | @SuppressWarnings("NullableProblems")
46 | @Override
47 | public boolean onDown(MotionEvent e) {
48 | return false;
49 | }
50 |
51 | @Override
52 | public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
53 | if (e1!=null && e2!=null) {
54 | try {
55 | float diffY = e2.getY() - e1.getY();
56 | float diffX = e2.getX() - e1.getX();
57 | if (Math.abs(diffX) > Math.abs(diffY)) {
58 | if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
59 | if (diffX > 0) {
60 | onSwipeRight();
61 | } else {
62 | onSwipeLeft();
63 | }
64 | }
65 | } else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
66 | if (diffY > 0) {
67 | onSwipeBottom();
68 | } else {
69 | onSwipeTop();
70 | }
71 | }
72 | } catch (Exception exception) {
73 | exception.printStackTrace();
74 | }
75 | }
76 | assert e1 != null;
77 | assert e2 != null;
78 | return super.onFling(e1, e2, velocityX, velocityY);
79 | }
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | "FOSS Browser" is a fully free (as in freedom) open source Android browser: privacy-friendly with a modern user interface. - Your privacy - your data.
2 |
3 | Project Homepage with further info: https://github.com/scoute-dich/browser/
4 |
5 |
6 | -------------------------------------------------
7 | UI/Handling
8 | -------------------------------------------------
9 |
10 | FOSS Browser uses the latest Material You design libraries. Following system day/night mode and a wallpaper based theme are just two features of this new library. The UI is optimized for one-hand-use. All UI-elements are at the bottom of the screen.
11 |
12 | More features:
13 |
14 | • Play audio on background.
15 | • Keep screen on.
16 | • Open links in background.
17 | • Restore tabs on restart.
18 |
19 |
20 | -------------------------------------------------
21 | Privacy
22 | -------------------------------------------------
23 |
24 | FOSS Browser uses profiles to protect your privacy. For each profile you can enable or disable: AdBlock, JavaScript, cookies, fingerprint protection and much more. Profiles can also be saved for domains ("github.com" ⇒ Trusted website). This saved domains always overwrite the current profile. So, for example, "github.com" will always open with the trusted profile, even if you are browsing in the protected mode.
25 |
26 | More privacy features:
27 |
28 | • Build in AdBlock, which updates automatically. You can decide which content to block. AdBlock hosts are taken from Steven Black - AbBlock hosts: https://github.com/StevenBlack/hosts.
29 | • Third-part-cookies can not be enabled.
30 | • Enable or disable Android-autofill.
31 | • Delete browser data (on app exit).
32 | • Choose between different search engines (or set a custom one).
33 | • FOSS Browser itself doesn't collect any data
34 |
35 |
36 | -------------------------------------------------
37 | Bookmarks filter
38 | -------------------------------------------------
39 |
40 | Organize your bookmarks with filters. You can set custom names for each filter. Long press the bookmark icon in the toolbar to get fast access to your favorite bookmarks.
41 |
42 |
43 | -------------------------------------------------
44 | Gestures
45 | -------------------------------------------------
46 |
47 | You can assign nearly twenty different gestures to the toolbar and the toolbar buttons. Each in four directions. You can also trigger events by long pressing the toolbar buttons. So you have up to ten different gestures to control FOSS Browser. Supported is for example: load last website, switch tab, reload, open bookmarks, ... and many more.
48 |
49 |
50 | -------------------------------------------------
51 | Backups
52 | -------------------------------------------------
53 |
54 | Backup all your important data (bookmarks, history, trusted websites and so on) on your SD-card. You can also back up FOSS Browser settings. Backups can even be restored on a fresh install or an other device (if you copy the backup files to the new device).
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/full_description.txt:
--------------------------------------------------------------------------------
1 | "FOSS Browser" ist ein komplett freier (wie in Freiheit), quelloffener Browser für Android: datenschutzfreundlich mit einer modernen Benutzeroberfläche. Your privacy - your data.
2 |
3 | Projektseite mit weiteren Informationen: https://github.com/scoute-dich/browser/
4 |
5 |
6 | -------------------------------------------------
7 | UI/Handling
8 | -------------------------------------------------
9 |
10 | FOSS Browser uses the latest Material You design libraries. Following system day/night mode and a wallpaper based theme are just two features of this new library. The UI is optimized for one-hand-use. All UI-elements are at the bottom of the screen.
11 |
12 | More features:
13 |
14 | • Play audio on background.
15 | • Keep screen on.
16 | • Open links in background.
17 | • Restore tabs on restart.
18 |
19 |
20 | -------------------------------------------------
21 | Privacy
22 | -------------------------------------------------
23 |
24 | FOSS Browser uses profiles to protect your privacy. For each profile you can enable or disable: AdBlock, JavaScript, cookies, fingerprint protection and much more. Profiles can also be saved for domains ("github.com" ⇒ Trusted website). This saved domains always overwrite the current profile. So, for example, "github.com" will always open with the trusted profile, even if you are browsing in the protected mode.
25 |
26 | More privacy features:
27 |
28 | • Build in AdBlock, which updates automatically. You can decide which content to block. AdBlock hosts are taken from Steven Black - AbBlock hosts: https://github.com/StevenBlack/hosts.
29 | • Third-part-cookies can not be enabled.
30 | • Enable or disable Android-autofill.
31 | • Delete browser data (on app exit).
32 | • Choose between different search engines (or set a custom one).
33 | • FOSS Browser itself doesn't collect any data
34 |
35 |
36 | -------------------------------------------------
37 | Bookmarks filter
38 | -------------------------------------------------
39 |
40 | Organize your bookmarks with filters. You can set custom names for each filter. Long press the bookmark icon in the toolbar to get fast access to your favorite bookmarks.
41 |
42 |
43 | -------------------------------------------------
44 | Gestures
45 | -------------------------------------------------
46 |
47 | You can assign nearly twenty different gestures to the toolbar and the toolbar buttons. Each in four directions. You can also trigger events by long pressing the toolbar buttons. So you have up to ten different gestures to control FOSS Browser. Supported is for example: load last website, switch tab, reload, open bookmarks, ... and many more.
48 |
49 |
50 | -------------------------------------------------
51 | Backups
52 | -------------------------------------------------
53 |
54 | Backup all your important data (bookmarks, history, trusted websites and so on) on your SD-card. You can also back up FOSS Browser settings. Backups can even be restored on a fresh install or an other device (if you copy the backup files to the new device).
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/fragment/Fragment_settings_UI.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.fragment;
2 |
3 | import android.content.Context;
4 | import android.content.SharedPreferences;
5 | import android.os.Bundle;
6 |
7 | import androidx.preference.EditTextPreference;
8 | import androidx.preference.ListPreference;
9 | import androidx.preference.Preference;
10 | import androidx.preference.PreferenceGroup;
11 |
12 | import java.util.Objects;
13 |
14 | import de.baumann.browser.R;
15 | import de.baumann.browser.preferences.BasePreferenceFragment;
16 |
17 | public class Fragment_settings_UI extends BasePreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
18 |
19 | @Override
20 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
21 |
22 | setPreferencesFromResource(R.xml.preference_ui, rootKey);
23 | Context context = getContext();
24 | assert context != null;
25 | initSummary(getPreferenceScreen());
26 | }
27 |
28 | private void initSummary(Preference p) {
29 | if (p instanceof PreferenceGroup) {
30 | PreferenceGroup pGrp = (PreferenceGroup) p;
31 | for (int i = 0; i < pGrp.getPreferenceCount(); i++) {
32 | initSummary(pGrp.getPreference(i));
33 | }
34 | } else {
35 | updatePrefSummary(p);
36 | }
37 | }
38 |
39 | private void updatePrefSummary(Preference p) {
40 | if (p instanceof ListPreference) {
41 | ListPreference listPref = (ListPreference) p;
42 | if (p.getSummaryProvider() == null) p.setSummary(listPref.getEntry());
43 | }
44 | if (p instanceof EditTextPreference) {
45 | EditTextPreference editTextPref = (EditTextPreference) p;
46 | if (Objects.requireNonNull(p.getTitle()).toString().toLowerCase().contains("password")) {
47 | p.setSummary("******");
48 | } else {
49 | p.setSummary(editTextPref.getText());
50 | }
51 | }
52 | }
53 |
54 | @Override
55 | public void onSharedPreferenceChanged(final SharedPreferences sp, String key) {
56 | if (key.equals("sp_exit") || key.equals("sp_toggle") || key.equals("sp_add") || key.equals("sp_theme")
57 | || key.equals("nav_position") || key.equals("sp_hideOmni") || key.equals("start_tab") || key.equals("sp_hideSB")
58 | || key.equals("overView_place") || key.equals("overView_hide") || key.equals("hideToolbar") || key.equals("useDynamicColor")) {
59 | sp.edit().putInt("restart_changed", 1).apply();
60 | }
61 | updatePrefSummary(findPreference(key));
62 | }
63 |
64 | @Override
65 | public void onResume() {
66 | super.onResume();
67 | Objects.requireNonNull(getPreferenceScreen().getSharedPreferences()).registerOnSharedPreferenceChangeListener(this);
68 | }
69 |
70 | @Override
71 | public void onPause() {
72 | super.onPause();
73 | Objects.requireNonNull(getPreferenceScreen().getSharedPreferences()).unregisterOnSharedPreferenceChangeListener(this);
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/preferences/ListSwitchPreference.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.preferences;
2 |
3 | import android.content.Context;
4 | import android.content.SharedPreferences;
5 | import android.content.res.TypedArray;
6 | import android.util.AttributeSet;
7 | import android.view.ViewGroup;
8 | import android.widget.CompoundButton;
9 | import android.widget.LinearLayout;
10 |
11 | import androidx.annotation.NonNull;
12 | import androidx.preference.ListPreference;
13 | import androidx.preference.PreferenceManager;
14 | import androidx.preference.PreferenceViewHolder;
15 |
16 | import com.google.android.material.materialswitch.MaterialSwitch;
17 |
18 | import de.baumann.browser.R;
19 | import de.baumann.browser.unit.HelperUnit;
20 |
21 | public class ListSwitchPreference extends ListPreference {
22 |
23 | private String ListSwitchKey;
24 | private boolean ListSwitchKeyDefaultValue;
25 | private boolean switchAttached = false;
26 |
27 | public ListSwitchPreference(Context context, AttributeSet attrs) {
28 | super(context, attrs);
29 | ListSwitchKey = null;
30 | ListSwitchKeyDefaultValue = false;
31 | TypedArray valueArray;
32 | if (attrs != null) {
33 | valueArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.ListSwitchPreference, 0, 0);
34 | ListSwitchKey = valueArray.getString(R.styleable.ListSwitchPreference_listSwitchKey);
35 | ListSwitchKeyDefaultValue = valueArray.getBoolean(R.styleable.ListSwitchPreference_listSwitchKeyDefaultValue, false);
36 | valueArray.recycle();
37 | }
38 | }
39 |
40 | @Override
41 | public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
42 |
43 | final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
44 | final ViewGroup rootView;
45 | final MaterialSwitch onOffSwitch;
46 | final CompoundButton.OnCheckedChangeListener checkedChangeListener;
47 | super.onBindViewHolder(holder);
48 |
49 | rootView = (ViewGroup) holder.itemView;
50 | if (!switchAttached && (ListSwitchKey != null)) {
51 |
52 | LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
53 | LinearLayout.LayoutParams.WRAP_CONTENT,
54 | LinearLayout.LayoutParams.WRAP_CONTENT
55 | );
56 | params.setMargins(0, 0, HelperUnit.convertDpToPixel(5f, getContext()),0);
57 |
58 | onOffSwitch = new MaterialSwitch(getContext());
59 | onOffSwitch.setLayoutParams(params);
60 | rootView.addView(onOffSwitch);
61 | switchAttached = true;
62 | onOffSwitch.setChecked(sp.getBoolean(ListSwitchKey, ListSwitchKeyDefaultValue));
63 | checkedChangeListener = (buttonView, isChecked) -> {
64 | if (ListSwitchKey != null) {
65 | sp.edit().putBoolean(ListSwitchKey, isChecked).apply();
66 | }
67 | };
68 | onOffSwitch.setOnCheckedChangeListener(checkedChangeListener);
69 | checkedChangeListener.onCheckedChanged(onOffSwitch, onOffSwitch.isChecked());
70 | }
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/activity/Settings_Profile.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.activity;
2 |
3 | import android.content.SharedPreferences;
4 | import android.net.Uri;
5 | import android.os.Bundle;
6 | import android.view.Menu;
7 | import android.view.MenuItem;
8 | import android.view.Window;
9 | import android.view.WindowManager;
10 |
11 | import androidx.appcompat.app.AppCompatActivity;
12 | import androidx.appcompat.app.AppCompatDelegate;
13 | import androidx.appcompat.widget.Toolbar;
14 | import androidx.core.content.ContextCompat;
15 | import androidx.preference.PreferenceManager;
16 |
17 | import java.util.Objects;
18 |
19 | import de.baumann.browser.R;
20 | import de.baumann.browser.fragment.Fragment_settings_Profile;
21 | import de.baumann.browser.unit.BrowserUnit;
22 | import de.baumann.browser.unit.HelperUnit;
23 |
24 | public class Settings_Profile extends AppCompatActivity {
25 |
26 | @Override
27 | public void onCreate(Bundle savedInstanceState) {
28 | super.onCreate(savedInstanceState);
29 |
30 | if (getSupportActionBar() != null) getSupportActionBar().hide();
31 | Window window = this.getWindow();
32 | window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
33 | window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
34 | window.setStatusBarColor(ContextCompat.getColor(this, R.color.md_theme_light_onBackground));
35 |
36 | AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
37 | HelperUnit.initTheme(this);
38 | setContentView(R.layout.activity_settings);
39 | Toolbar toolbar = findViewById(R.id.toolbar);
40 | setSupportActionBar(toolbar);
41 | Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
42 |
43 | getSupportFragmentManager()
44 | .beginTransaction()
45 | .replace(R.id.content_frame, new Fragment_settings_Profile())
46 | .commit();
47 |
48 | SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
49 | String profile = sp.getString("profileToEdit", "profileStandard");
50 |
51 | switch (Objects.requireNonNull(profile)) {
52 | case "profileStandard":
53 | setTitle(getString(R.string.setting_title_profiles_standard));
54 | break;
55 | case "profileTrusted":
56 | setTitle(getString(R.string.setting_title_profiles_trusted));
57 | break;
58 | case "profileProtected":
59 | setTitle(getString(R.string.setting_title_profiles_protected));
60 | break;
61 | }
62 | }
63 |
64 | @Override
65 | public boolean onCreateOptionsMenu(Menu menu) {
66 | getMenuInflater().inflate(R.menu.menu_help, menu);
67 | return super.onCreateOptionsMenu(menu);
68 | }
69 |
70 | @Override
71 | public boolean onOptionsItemSelected(MenuItem menuItem) {
72 | if (menuItem.getItemId() == android.R.id.home) finish();
73 | if (menuItem.getItemId() == R.id.menu_help) {
74 | Uri webpage = Uri.parse("https://github.com/scoute-dich/browser/wiki/Edit-profiles");
75 | BrowserUnit.intentURL(this, webpage);
76 | }
77 | return true;
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_settings_backup.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
17 |
18 |
22 |
23 |
24 |
25 |
28 |
29 |
33 |
34 |
38 |
39 |
44 |
45 |
57 |
58 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/app/src/main/java/de/baumann/browser/preferences/BasePreferenceFragment.java:
--------------------------------------------------------------------------------
1 | package de.baumann.browser.preferences;
2 |
3 | import android.app.Dialog;
4 | import android.content.Context;
5 | import android.os.Bundle;
6 | import android.view.View;
7 |
8 | import androidx.annotation.NonNull;
9 | import androidx.annotation.Nullable;
10 | import androidx.preference.EditTextPreference;
11 | import androidx.preference.ListPreference;
12 | import androidx.preference.Preference;
13 | import androidx.preference.PreferenceFragmentCompat;
14 |
15 | import com.google.android.material.dialog.MaterialAlertDialogBuilder;
16 | import com.google.android.material.textfield.TextInputEditText;
17 |
18 | import java.util.Arrays;
19 | import java.util.Objects;
20 |
21 | import de.baumann.browser.R;
22 | import de.baumann.browser.unit.HelperUnit;
23 |
24 | public class BasePreferenceFragment extends PreferenceFragmentCompat {
25 | @Override
26 | public void onCreatePreferences(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState, @Nullable @org.jetbrains.annotations.Nullable String rootKey) {
27 | }
28 |
29 | @Override
30 | public void onDisplayPreferenceDialog(@NonNull Preference preference) {
31 | if (preference instanceof ListPreference) {
32 | showListPreference((ListPreference) preference);
33 | } else if (preference instanceof EditTextPreference) {
34 | showEditTextPreference((EditTextPreference) preference);
35 | } else {
36 | super.onDisplayPreferenceDialog(preference);
37 | }
38 | }
39 |
40 | public void showListPreference(@NonNull ListPreference preference) {
41 | int selectionIndex = Arrays.asList(preference.getEntryValues()).indexOf(preference.getValue());
42 | MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext());
43 | builder.setTitle(preference.getTitle());
44 | builder.setNegativeButton(R.string.app_cancel, null);
45 | builder.setSingleChoiceItems(preference.getEntries(), selectionIndex, (dialog, index) -> {
46 | String newValue = preference.getEntryValues()[index].toString();
47 | if (preference.callChangeListener(newValue)) {
48 | preference.setValue(newValue);
49 | }
50 | dialog.dismiss();
51 | });
52 | builder.show();
53 | }
54 |
55 | public void showEditTextPreference(@NonNull EditTextPreference preference) {
56 | View dialogView = View.inflate(getContext(), R.layout.dialog_edit_text, null);
57 | TextInputEditText input = dialogView.findViewById(R.id.textInput);
58 | input.setText(preference.getText());
59 |
60 | MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext());
61 | builder.setTitle(preference.getTitle());
62 | builder.setIcon(R.drawable.icon_edit);
63 | builder.setNegativeButton(R.string.app_cancel, null);
64 | builder.setPositiveButton(R.string.app_ok, (dialog, i) -> {
65 | String newValue = Objects.requireNonNull(input.getText()).toString();
66 | if (preference.callChangeListener(newValue)) {
67 | preference.setText(newValue);
68 | }
69 | dialog.dismiss();
70 | });
71 | builder.setView(dialogView);
72 | Dialog dialog = builder.create();
73 | dialog.show();
74 | Context context = this.getContext();
75 | assert context != null;
76 | HelperUnit.setupDialog(context, dialog);
77 | }
78 | }
79 |
--------------------------------------------------------------------------------