Compare commits

..

No commits in common. "master" and "v0.98-alpha4" have entirely different histories.

2224 changed files with 75106 additions and 112940 deletions

1
.gitattributes vendored
View File

@ -1 +0,0 @@
*.gpg binary

11
.gitignore vendored
View File

@ -17,6 +17,12 @@ build.xml
.gradle/
build/
# Gradle wrapper
gradlew
gradlew.bat
gradle-wrapper.jar
gradle-wrapper.properties
# Local configuration file (sdk path, etc)
local.properties
@ -42,8 +48,3 @@ extern/*/*/libs/
# Tests
junit-report.xml
# Screen dumps from Android Studio/DDMS
captures/
/fdroid/

View File

@ -1,142 +1,41 @@
stages:
- test
- deploy
before_script:
- apt-get -q update -y
- echo " == Installing packages required by this CI script"
- apt-get -q install -y wget tar unzip
- echo " == Installing OpenJDK 7"
- apt-get -q install -y openjdk-7-jdk
- echo " == Installing packages required by the 32-bit SDK"
- apt-get -q install -y lib32stdc++6 lib32z1
- echo " == Installing the Android SDK"
- wget -q -O android-sdk.tgz https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
- tar -x -z -f android-sdk.tgz
- mv android-sdk-linux android-sdk
- export ANDROID_HOME=$PWD/android-sdk
- export PATH="$ANDROID_HOME/tools:$PATH"
- echo " == Installing Android SDK components"
- echo y | android -s update sdk --no-ui -a -t platform-tools,tools,build-tools-23.0.2,android-22,extra-android-m2repository
- export PATH="$ANDROID_HOME/platform-tools:$PATH"
- export PATH="$ANDROID_HOME/build-tools/23.0.2:$PATH"
- echo " == Installing Android emulator images"
- echo y | android -s update sdk --no-ui -a -t android-10
- echo " == Installing Gradle"
- wget -q -O gradle.zip https://services.gradle.org/distributions/gradle-2.8-bin.zip
- unzip -q gradle.zip
- export PATH="$PWD/gradle-2.8/bin:$PATH"
.base:
image: registry.gitlab.com/fdroid/ci-images-client:latest
before_script:
- export GRADLE_USER_HOME=$PWD/.gradle
- export ANDROID_COMPILE_SDK=`sed -n 's,.*compileSdkVersion\s*\([0-9][0-9]*\).*,\1,p' app/build.gradle`
- alias sdkmanager="sdkmanager --no_https"
- echo y | sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" > /dev/null
# limit RAM usage for all gradle runs
- export maxmem=$(expr $(sed -n 's,^MemAvailable:[^0-9]*\([0-9][0-9]*\)[^0-9]*$,\1,p' /proc/meminfo) / 1024 / 2 / 1024 \* 1024)
- printf "\norg.gradle.jvmargs=-Xmx${maxmem}m -XX:MaxPermSize=${maxmem}m\norg.gradle.daemon=false\norg.gradle.parallel=false\n" >> gradle.properties
after_script:
# this file changes every time but should not be cached
- rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock
- rm -fr $GRADLE_USER_HOME/caches/*/plugin-resolution/
cache:
paths:
- .gradle/wrapper
- .gradle/caches
.test-template: &test-template
extends: .base
stage: test
artifacts:
name: "${CI_PROJECT_PATH}_${CI_JOB_STAGE}_${CI_COMMIT_REF_NAME}_${CI_COMMIT_SHA}"
paths:
- kernel.log
- logcat.txt
- app/core*
- app/*.log
- app/build/reports
- app/build/outputs/*ml
- app/build/outputs/apk
expire_in: 1 week
when: on_failure
after_script:
- echo "Download debug artifacts from https://gitlab.com/${CI_PROJECT_PATH}/-/jobs"
# Run the most important first. Then we can decide whether to ignore
# the style tests if the rest of the more meaningful tests pass.
test_lint_pmd_checkstyle:
<<: *test-template
test:
script:
- export EXITVALUE=0
- function set_error() { export EXITVALUE=1; printf "\x1b[31mERROR `history|tail -2|head -1|cut -b 6-500`\x1b[0m\n"; }
- ./gradlew assemble
# always report on lint errors to the build log
- sed -i -e 's,textReport .*,textReport true,' app/build.gradle
- ./gradlew testFullDebugUnitTest || set_error
- ./gradlew lint || set_error
- ./gradlew pmd || set_error
- ./gradlew checkstyle || set_error
- ./tools/check-format-strings.py || set_error
- ./tools/check-fastlane-whitespace.py || set_error
- ./tools/remove-unused-and-blank-translations.py || set_error
- echo "These are unused or blank translations that should be removed:"
- git --no-pager diff --ignore-all-space --name-only --exit-code app/src/*/res/values*/strings.xml || set_error
- exit $EXITVALUE
errorprone:
extends: .base
stage: test
script:
- apt-get update
- apt-get install -t stretch-backports openjdk-11-jdk-headless
- update-java-alternatives --set java-1.11.0-openjdk-amd64
- export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
- cat config/errorprone.gradle >> app/build.gradle
- ./gradlew -Dorg.gradle.dependency.verification=lenient assembleDebug
# Run the tests in the emulator. Each step is broken out to run on
# its own since the CI runner can have limited RAM, and the emulator
# can take a while to start.
#
# once these prove stable, the task should be switched to
# connectedCheck to test all the build flavors
.connected-template: &connected-template
extends: .base
script:
- ./gradlew assembleFullDebug
- export AVD_SDK=`echo $CI_JOB_NAME | awk '{print $2}'`
- export AVD_TAG=`echo $CI_JOB_NAME | awk '{print $3}'`
- export AVD_ARCH=`echo $CI_JOB_NAME | awk '{print $4}'`
- export AVD_PACKAGE="system-images;android-${AVD_SDK};${AVD_TAG};${AVD_ARCH}"
- echo $AVD_PACKAGE
- alias sdkmanager
- ls -l ~/.android
- adb start-server
- start-emulator
- wait-for-emulator
- adb devices
- adb shell input keyevent 82 &
- ./gradlew installFullDebug
- adb shell am start -n org.fdroid.fdroid.debug/org.fdroid.fdroid.views.main.MainActivity
- if [ $AVD_SDK -lt 25 ] || ! emulator -accel-check; then
export FLAG=-Pandroid.testInstrumentationRunnerArguments.notAnnotation=androidx.test.filters.LargeTest;
fi
- ./gradlew connectedFullDebugAndroidTest $FLAG
no-accel 22 default x86:
<<: *test-template
<<: *connected-template
.kvm-template: &kvm-template
tags:
- fdroid
- kvm
only:
variables:
- $RUN_KVM_JOBS
<<: *test-template
<<: *connected-template
kvm 29 microg x86_64:
<<: *kvm-template
deploy_nightly:
extends: .base
stage: deploy
only:
- master
script:
- test -z "$DEBUG_KEYSTORE" && exit 0
- sed -i
's,<string name="app_name">.*</string>,<string name="app_name">F-Nightly</string>,'
app/src/main/res/values*/strings.xml
# add this nightly repo as a enabled repo
- sed -i -e '/<\/string-array>/d' -e '/<\/resources>/d' app/src/main/res/values/default_repos.xml
- echo "<item>${CI_PROJECT_PATH}-nightly</item>" >> app/src/main/res/values/default_repos.xml
- echo "<item>${CI_PROJECT_URL}-nightly/raw/master/fdroid/repo</item>" >> app/src/main/res/values/default_repos.xml
- cat config/nightly-repo/repo.xml >> app/src/main/res/values/default_repos.xml
- export DB=`sed -n 's,.*DB_VERSION *= *\([0-9][0-9]*\).*,\1,p' app/src/main/java/org/fdroid/fdroid/data/DBHelper.java`
- export versionCode=`printf '%d%05d' $DB $(date '+%s'| cut -b4-8)`
- sed -i "s,^\(\s*versionCode\) *[0-9].*,\1 $versionCode," app/build.gradle
# build the APKs!
- ./gradlew assembleDebug
- fdroid nightly -v
- echo " == Running build"
- gradle build
- echo " == Running checkstyle"
- gradle checkstyle
- echo " == Creating Android 2.3.7 emulator"
- echo no | android create avd --force -n fcl-test -t android-10 -b armeabi
- echo " == Starting Android 2.3.7 emulator"
- emulator -force-32bit -avd fcl-test -no-skin -no-audio -no-window &
- ./tools/wait-for-emulator
- adb shell input keyevent 82
- echo " == Running Android tests on the 2.3.7 emulator"
- ADB_INSTALL_TIMEOUT=8 gradle connectedCheck || { adb logcat -d '*:W'; exit 1; }
- echo " == Stopping Android 2.3.7 emulator"
- kill $!

View File

@ -1,3 +0,0 @@
[weblate]
url = https://hosted.weblate.org/api/
translation = f-droid/f-droid

View File

@ -7,15 +7,15 @@ LOCAL_MODULE_TAGS := optional
LOCAL_PACKAGE_NAME := F-Droid
fdroid_root := $(LOCAL_PATH)
fdroid_dir := app
fdroid_out := $(PWD)/$(OUT_DIR)/target/common/obj/APPS/$(LOCAL_MODULE)_intermediates
fdroid_dir := F-Droid
fdroid_out := $(OUT_DIR)/target/common/obj/APPS/$(LOCAL_MODULE)_intermediates
fdroid_build := $(fdroid_root)/$(fdroid_dir)/build
fdroid_apk := build/outputs/apk/full/release/$(fdroid_dir)-full-release-unsigned.apk
fdroid_apk := build/outputs/apk/F-Droid-release-unsigned.apk
$(fdroid_root)/$(fdroid_dir)/$(fdroid_apk):
rm -Rf $(fdroid_build)
mkdir -p $(fdroid_out)
ln -sf $(fdroid_out) $(fdroid_build)
ln -s $(fdroid_out) $(fdroid_build)
cd $(fdroid_root)/$(fdroid_dir) && gradle assembleRelease
LOCAL_CERTIFICATE := platform
@ -23,4 +23,4 @@ LOCAL_SRC_FILES := $(fdroid_dir)/$(fdroid_apk)
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
include $(BUILD_PREBUILT)

View File

@ -1,670 +1,4 @@
### 1.13-alpha1 (2021-06-02)
* Stop repeated updates of Trichrome Library
* More changes to follow Material Design (@proletarius101)
* Improve OpenCollective badge (@ConnyDuck)
### 1.13-alpha0 (2021-04-22)
* Theme support tied to built-in Android themes (@proletarius101)
* New top banner notifications: "No Internet" and "No Data or WiFi enabled"
* Improved handling of USB-OTG and SD Card repos and mirrors
### 1.12.1 (2021-04-12)
* Fix trove4j verification error
### 1.12 (2021-04-06)
* Sync translations
### 1.12-alpha3 (2021-03-10)
* Opt-in F-Droid Metrics
### 1.12-alpha2 (2021-03-03)
* Overhaul clean up of cached files
* Support updating "shared library packages" like Trichrome (@uldiniad)
### 1.12-alpha1 (2021-02-25)
* Add extra sanitation to search terms to prevent vulnerabilities.
* Fix Nearby Swap's close button (@proletarius101)
* Bump to compileSdkVersion 29 to support Java8
* Set up WorkManager on demand to avoid slowing down starts
* Prefer system keys when APKs are signed by them (@glennmen)
### 1.12-alpha0 (2021-02-08)
* App description localization now fully respects lists of languages in Android
Language Settings
* Latest Tab lists results based on the Language Settings
* Latest Tab now shows results ordered newest first (@TheLastProject @IzzySoft)
* Theme support modernized and tied to the built-in Android themes (@proletarius101)
* Search results greatly improved (@Tvax @gcbrown76)
* Let Android efficiently schedule background cache cleanup operations (@Isira-Seneviratne)
* Overhaul repo URL parsing for reliable repo adding (@projectgus)
### 1.11 (2020-12-29)
* Improved linkifying of URLs in app descriptions
* Improved handling of SDCards and USG-OTG in Nearby
* Modernized code and switched PNGs to vectors (thanks @isira-seneviratne!)
* Recognize longer repo URLs to support GitCDN/RawGit/etc mirrors
### 1.10 (2020-10-20)
* Improved language selection with multiple locales
(thanks @spacecowboy and @bubu!)
### 1.10-alpha1 (2020-09-29)
* use notification channels for fine-grained control (@Isira-Seneviratne)
### 1.10-alpha0 (2020-07-20)
* Latest Tab will show better results on non-English devices
* updates to core libraries (Jackson, androidx, gradle, etc)
* use Gradle's new dependency verification
* polish whitelabeling support
### 1.9 (2020-06-25)
* Removed "Android App Link" support since it cannot work with
F-Droid, and it was triggering DNS leaks.
* Archive Repos are now lower priority than the Repo (higher on the
Manage Repos screen), fixing issues where it looked for icons,
screenshots and other information in the Archive rather than the
Repo itself.
* Fixed hopefully all occurrences where F-Droid client couldn't show an icon.
The remaining cases of missing icons are now caused either by
icons not included in upstream repo or by temporary network failures.
(After updating this requires one additional repo update to take effect.)
* Fixed a problem where repository updates would never trigger
when either "Over Data" or "Over Wifi" were disabled.
* Support OpenCollective donation option and highlight
free software donation platforms
* Fix for when the app update button wasn't showing up or working
in some cases (thanks @di72nn)
* Stop cropping feature header image (thanks @ByteHamster!)
* Make navigation bar match dark mode (thanks @MatthieuB!)
* Cleaned out obsolete code (thanks @Isira-Seneviratne!)
### 1.8-alpha2 (2020-02-04)
* stop showing Unknown Sources with Privileged Extension on Android 10 #1833
* add standard ripple effect to links on app details activity
* fix displaying default icon for apps without icons
### 1.8-alpha1 (2020-01-10)
* handle Android 10 permission config to stop Unknown Sources prompts
* keyboard opens when search is cleared
* translation sync with Android strings
* force common repo domains to HTTPS (GitLab, GitHub, Amazon)
### 1.8-alpha0 (2019-11-20)
* fix seekbar preference on recent Android versions (thanks @dkanada)
* handle API 29 split-permissions: fine location now implies coarse location
* define backup rules to avoid saving the swap repo
### 1.7.1 (2019-07-31)
* fix crashes from ACRA report emails
### 1.7 (2019-07-06)
* fix crash in Panic Settings
* catch random crashes related to WifiApControl
### 1.7-alpha2 (2019-06-18)
* USB OTG flash drives can be used as nearby repos and mirrors
### 1.7-alpha1 (2019-06-14)
* overhauled nearby swap using the device's hotspot AP
* add new panic responses: app uninstalls and reset repos to default
* fix proxy support on first start
### 1.7-alpha0 (2019-05-20)
* major refactor of "Nearby" UI code, to prepare for rewriting guts
* show "undo" after swiping away items from the Updates tab (thanks @Hocuri!)
* fix ETag handling when connecting to nginx mirrors #1737
* fix issues with "Latest" display caused by mishandling time zones #1757
* ignore all unimportant crashes in background services
* do not use Privileged Extension if it was disabled in Settings
### 1.6.2 (2019-05-20)
* fixed issue where cached indexes were wrongly redownloaded (#1737),
thanks to @amiraliakbari for tracking it down!
* fixed wrong string for the translated title of the Updates Tab (#1785)
* fixed crashes on very low memory when starting
### 1.6.1 (2019-05-10)
* Updated translations
* fixed button size issues #1678
* stopped random background crashes
### 1.6 (2019-04-10)
* update F-Droid after all other updates (#1556)
* Improve adding repos from the clipboard (e.g. Firefox Klar)
* swap usability improvements
* many crash fixes in swap and background services
### 1.6-alpha2 (2019-03-28)
* Latest Tab now highlights apps that provide descriptions,
translations, screenshots
* Auto-download from mirrors, to speed up downloads and reduce load on
f-droid.org
* More efficient download caching (per-repo; across different
webservers #1708)
* Fix problems canceling downloads (#1727, #1736, #1742)
* Fix downloading OBB files from repos (#1403)
### 1.6-alpha1 (2019-02-20)
* add switches in RepoDetails to disable any or all mirrors (#1696)
* choose random mirror for each package/APK download
* make all APK downloads be cached per-repo, not per-mirror
* handle Apache and Nginx ETags when checking if index is current (#1708)
### 1.6-alpha0 (2019-02-15)
* handle implied READ_EXTERNAL_STORAGE permissions, which trigger a
permissions prompt on installs with Privileged Extension (#1702)
* sanitize index data to reduce the threats from the server
* set Read Timeout to trigger mirror use when reads are slow
* fix missing icons for those who do not use WiFi (#1592)
* use separate titles for Updates pref and Updates tab, so that they
can be better translated
* UI fixes from @ConnyDuck (#1636, #1618)
### 1.5.1 (2019-01-07)
* Removed incomplete translations that were accidentally added in 1.5
* Fix screenshot background on dark themes (#1618)
### 1.5 (2018-12-26)
* Nearby swap bug fixes and improvements
* update language and translations about Nearby and swap
* Fix displaying of icons for self-built apps (#1108)
### 1.5-alpha2 (2018-12-21)
* support swapping via SD Cards
* display versionCode in expanded Versions list entries in Expert Mode
### 1.5-alpha1 (2018-12-12)
* UX and language cleanup of App Details
### 1.5-alpha0 (2018-10-19)
* add repos via additional_repos.xml from ROM, OEM, Vendor.
### 1.4 (2018-09-12)
* polish up new "Versions" list and other UI fixes
### 1.4-alpha1 (2018-08-30)
* huge overhaul of the "Versions" list in the App Details screen, and
many other UI improvements, thanks to new contributor @wsdfhjxc
* fixes to allow keyboard/d-pad navigation in more places, thanks to
new contributor @doeffinger
### 1.4-alpha0 (2018-08-17)
* show "Open" button when media is installed and viewable
* retry index downloads from mirrors
* add Share button to "Installed Apps" to export CSV list
* add clickable list of APKs to the swap HTML index page
### 1.3.1 (2018-08-07)
* big overhaul of core nearby/swap plumbing
* TLSv1.3 support, when the device supports it
### 1.3 (2018-07-31)
* large overhaul to make status updates more reliable
* fixed many bugs around the wrong button showing
### 1.3-alpha5 (2018-07-21)
* overhaul install button logic to avoid false presses
* improved first time run experience
* export install/uninstall history
* more whitelabeling improvements
### 1.3-alpha4 (2018-07-13)
* fix Data/WiFi preferences to properly schedule Updats
* fix Install/Uninstall events for clearer feedback
* track pending installs properly, stop fake repeating updates
* add support for Repo Push Requests when using Index V1
* support NoSourceSince anti-feature
* share menu item for repos
* fix a few crasher bugs
### 1.3-alpha3 (2018-06-27)
* fix bug that disabled Privileged Extension
* prevent crash loop after rapid install/uninstall cycling
* add expert option to send debug version/UUID on each HTTP download
* allow user to disable ACRA entirely with a preference
* basic Install History viewer, available only when logging is enabled
### 1.3-alpha2 (2018-06-25)
* Settings improvements
* new Expert Setting for disabling all notifications
* huge improvements for custom "whitelabel" F-Droid versions
### 1.3-alpha1 (2018-06-15)
* improved Settings for controlling data usage
* support push install/uninstall requests in index-v1
### 1.3-alpha0 (2018-04-25)
* more battery conscious background operation on Android 5.0 and newer
* make Anti-Features list in App Details clickable
* new Settings for controlling data usage
* switch Settings to Material style
* bumped minimum supported version to Android 4.0 (14)
### 1.2.2 (2018-04-23)
* fix crasher bug on devices running on Android 4.2 or older #1424
### 1.2.1 (2018-04-18)
* improved automatic mirror selection
* more swap/nearby bug fixes and improvements
### 1.2 (2018-04-13)
* lots of swap/nearby bug fixes and improvements
* fix one cause of reoccuring update notifications (#1271)
* make F-Droid recognize fdroid nightly URLs from GitLab
### 1.2-alpha1 (2018-04-06)
* fix Privileged Extension install with apps with uses-permision-sdk-23
* automatically trim or delete cache when storage space is low
* improved performance on low memory devices
* make all downloads respect "Only on Wi-Fi" preference
### 1.2-alpha0 (2018-03-30)
* add custom mirrors to any repo by clicking links, scanning QR codes, etc.
* reduce memory usage when device is running low
### 1.1 (2018-03-21)
* fix some problems with items Updates reappearing
* fix failback install method when permissions aren't in sync #1310
### 1.1-alpha4 (2018-03-09)
* fix the most popular ACRA crash reports
* UI layout improvements
* warn users when scanning QR with camera without autofocus
### 1.1-alpha3 (2018-02-13)
* add sort button to Search view: alpha or most recent
* fix bugs: #1305 #1306 #1325
* add more detail to ACRA crash reports
### 1.1-alpha2 (2018-02-06)
* reload index after system locale change or OS upgrade
* add "panic responder" support
### 1.1-alpha1 (2018-01-26)
* provision new repos via a provisioning file
* "Android App Links" handling aka "Digital Asset Links"
* new privacy prefs: disable screenshots; exit on panic
### 1.1-alpha0 (2017-11-09)
* automatically choose between official repo mirrors
* fullscreen, swipeable app screenshot navigation
* new preference to prevent screenshots/recents
* fix crasher bug #1203
### 1.0.1 (2017-10-23)
* fixed index update failure on Android 5.0 (#1014)
### 1.0 (2017-10-10)
* Completely overhauled workflow for updating apps
* Fully translatable app summaries and descriptions
* "What's New" section to show changes in current release
* Screenshots and feature graphics
* Support installing media, OTA, ZIP, etc. files
* Improved protection against tracking (HTTP ETag, TLS, etc.)
* Fully background updates with Privileged Extension
* Highlight donations to app developers
* Much faster index updates
### 1.0-alpha5 (2017-10-04)
* Fix bug that prevented translations from showing up on Android >= 7.0 (#987)
* Fix DB upgrade crash from 1.0-alpha3 --> 1.0-alpha4 (#1181)
### 1.0-alpha4 (2017-09-27)
* Added swipe gestures to the Updates tab
* Display warnings with actions in Updates tab for KnownVulns
* Translation updates
* Dark UI fixes
### 1.0-alpha3 (2017-09-12)
* Big UI performance improvements, especially with archive enabled
* Fixed crasher bugs
### 1.0-alpha2 (2017-09-04)
* Prevent HTTP ETag from being used as a tracking cookie
* Improved screenshots layout
* Properly clean up temp and cached files
* Dark mode fixes
### 1.0-alpha1 (2017-07-18)
* Fix bug removing apps from repos (#568)
* Much faster index updates
### 1.0-alpha0 (2017-07-08)
* Support installing media, OTA, ZIP, etc. files
* Fully support APKs signed by multiple signing keys
* Tibetan translation
* Remove related apps and categories after disabling repo
### 0.104 (2017-06-16)
* Support apps with APKs signed by more than one key
* Fix F-Droid update notifications that never go away
### 0.103.2 (2017-05-31)
* Fix problematic updates and notifications (#1013)
* Language and stability updates
### 0.103.1 (2017-05-12)
* Various stability fixes
* Bits of text no longer randomly switch to English
* Fix send F-Droid via Bluetooth on Android 7.x
### 0.103 (2017-05-02)
* Complete overhaul of the user experience
* Complete support for localization, including app descriptions
* Support for screenshots, graphics, and "What's New" texts
* Stable support for F-Droid Privileged Extension
### 0.102.3 (2017-04-01)
* Fix issue with installing from the wrong repo (#909)
* Allow F-Droid to update Privileged Extension (#911)
* Ignore errors that are likely due to filesystem corruption (#855)
* Improve installs/uninstalls with Privileged Extension on 7.x
### 0.102.2 (2017-03-14)
* Fix installing with Privileged Extension on 7.x
* Detect app updates via sytem OTA updates (#819)
### 0.102.1 (2017-02-24)
* Detect installed/uninstalled state more reliably (#854)
* Ensure dark theme gets applied everywhere (#750)
### 0.102 (2016-11-28)
* Optionally keep install history
* Optionally let repositories request installs and uninstalls of apps
* Support for APK extension files (OBB)
* Enable TLS v1.2 for HTTPS on all devices that support it (again)
* Better support for multiple repositories providing the same app
### 0.101 (2016-09-28)
* Support for Android 2.2 is dropped, 2.3.3 or later is now required
* Fixed APK Cache bugs, requiring the cache time be reset to one day
* Use Privileged Extension by default if installed
* Optionally grey out apps that require Anti-Features
* Translation updates
### 0.100.1 (2016-06-21)
* Fix background crash after installing or updating apps
* Fix crash if an app has a short description
* Fix background crash in the Wi-Fi state change swap service
* Fix crash if there is a problem listing the cached files to delete
### 0.100 (2016-06-07)
* Ability to download apps in the background
* Significant performance improvements when updating repositories
* Add setting to enable automatic downloading of updates
* Apks can now be kept on disk for various amounts of time
* Show what repository each apk comes from
* Better support for Android 6.0
* Translation updates
### 0.99.2 (2016-04-01)
* Stability fixes for app swap
### 0.99.1 (2016-03-22)
* Re-enable SNI support on Guardian Project repo
### 0.99 (2016-02-29)
* Add simple "Use Tor" setting
* Enable TLS v1.2 for HTTPS on all devices that support it
* Fix a series of Swap crashes, including a background crash
* Fix most Android lint errors and some warnings
* Translation updates
### 0.98.1 (2016-02-14)
* Fix crash when entering only a space into the search dialog
* Fix crash when entering slashes into the search dialog
* Fix potential fragment crash when installing/removing a package
* Fix crash when adding malformed URIs as repos
* Fix Android.mk build when the output dir. is a relative path
### 0.98 (2016-02-01)
* Add opt-in crash reporting via ACRA
### 0.98 (upcoming release)
* Add support for HTTP basic authentication of repos
@ -674,8 +8,6 @@
* Add English to the list of languages to use in the settings
* Fix "database is locked" seemingly random crash
* Cache installed app information in the database
* Add counter to the installed tab
@ -684,8 +16,6 @@
* Translation updates
* Display license and author information in app details where appropriate
### 0.97 (2015-11-07)
* Add option to prompt for unstable updates globally
@ -724,7 +54,7 @@
* Move the repo index update to a notification
* Handle APK downloads without a dialog
* Handle apk downloads without a dialog
* Don't let users try to uninstall system apps that haven't been updated
@ -767,14 +97,14 @@
and now easy to set up with root privileges
* Speed up and simplify repo update process by streaming the data out of the
JAR file directly
jar file directly
* Can now manually add swap repo via "Repositories" screen
* Using NFC during swap now initiates a proper swap, rather than redirecting to
the "Repositories" screen
* Drop Ant support to greatly simplify the build process and its maintenance
* Drop ant support to greatly simplify the build process and its maintenance
### 0.92 (2015-06-08)
@ -782,7 +112,7 @@
* Update Universal-Image-Loader to 1.9.4
* Make APK downloads progress be measured in kilobytes instead of bytes
* Make Apk downloads progress be measured in kilobytes instead of bytes
* Add missing Sardinian language to the preferences
@ -795,9 +125,9 @@
since it's not needed to use our own external app directory
* Fix a crash occuring if the user triggered a repo update that got rid of
more than 450 APKs at once
more than 450 apks at once
* Properly cache APK files on the SD card if configured this way
* Properly cache apk files on the SD card if configured this way
* Drop support for unsigned repos in favour of signed ones and TOFU support
@ -811,7 +141,7 @@
* Don't crash if links on descriptions cannot be handled by any application
* Support building as part of a ROM via an Android.mk using Gradle
* Support building as part of a ROM via an Android.mk using gradle
### 0.88 (2015-04-28)
@ -821,7 +151,7 @@
* User interface language can now be changed from inside the F-Droid
preferences without changing the system language (locale)
* Fix an issue where XML files could pile up in the data directory
* Fix an issue where xml files could pile up in the data directory
* Improve app and search link handling while also adding supporting for Amazon
and Google Play links
@ -831,12 +161,12 @@
* Show a message to the user when there are no apps to display.
* Swapping is now two-way. Connecting to a swap on one device will
initiate a swap on the other device
* Swapping is now two way. Connecting to a swap on one device will
initiate a swap on the other device.
* Small UI fixes to avoid overlapping text and improve app version ellipsizing
* Split up search terms when querying the app database"fire fox" now
* Split up search terms when querying the app database - "fire fox" now
matches FireFox
* Ignore trailing paces in search terms introduced by some input methods
@ -853,7 +183,7 @@
* Fix issue that caused the installed state label to sometimes not be updated
* Support for future devices with more than two CPU architectures
* Support for future devices with more than two cpu architectures
* Show when packages are installed but not via F-Droid (mismatching signature)
@ -882,7 +212,7 @@
* Update Universal-Image-Loader and the Support libraries
* Switch the directory structure to better suit building with Gradle
* Switch the directory structure to better suit building with gradle
* Translation updates
@ -904,14 +234,14 @@
* HTTP Proxy support in Preferences
* Directly send installed apps to other devices via Bluetooth and Android Beam
(NFC+Bluetooth), also compatible with Samsung/HTC S Beam
(NFC+Bluetooth), also compatible with Samsung/HTC S-Beam
* Initial support for root and system installers, allowing the client to
install APKs directly on its own
install apks directly on its own
* Increased performance when updating from repository with many apps
* Switch to AppCompat from the Support library
* Switch to Appcompat from the Support library
* Fix some crashes
@ -950,7 +280,7 @@
* Send F-Droid via Bluetooth to any device that supports receiving APKs via
Bluetooth (stock Android blocks APKs, most ROMs allow them)
* NFC support: Beam repo configs from the repo detail view (Android 4.0+),
* NFC support: beam repo configs from the repo detail view (Android 4.0+),
beam the F-Droid.apk from F-Droid's main screen (Android 4.1+)
* Support for repositories using self-signed HTTPS certificates through
@ -964,7 +294,7 @@
* Major internal changes to enable F-Droid to handle repos with thousands
of apps without slowing down too much. These internal changes will also make
new features easier to implement
new features easier to implement.
* Various fixes to layout issues introduced in 0.58
@ -978,7 +308,7 @@
* Tweaked some layouts, especially the app lists and their compact layout
* App lists now show more useful version information: Current version names,
* App lists now show more useful version information: current version names,
rather than number of versions available
* Reduce scroll lag in app lists by caching views in a ViewHolder
@ -994,21 +324,21 @@
can see what the checkbox preferences actually mean and what the edit and
list preferences are set at
* Support for Dogecoin donation method added (wow)
* Support for dogecoin donation method added (wow)
* Don't keep app icons older than 30 days in disc cache
* Don't keep app icons older than 30 days on disc cache
* Always include incompatible APKs in memory to avoid issues with apps
seemingly not having any APKs available
* Always include incompatible apks in memory to avoid issues with apps
seemingly not having any apks available
* Fixed a crash when trying to access a non-existing app
* F-Droid registers with Android to receive F-Droid URIs https://\*/fdroid/repo
and fdroidrepos://
* Support including signing key fingerprint in repo URIs
* support including signing key fingerprint in repo URIs
* When adding new repos that include the fingerprint, check to see whether
* when adding new repos that include the fingerprint, check to see whether
that repo exists in F-Droid already, and if the fingerprints match
* Other minor bug fixes
@ -1019,12 +349,12 @@
* Fixed problems with category selection and permission lists on Android 2.X devices.
* Lots of translation updates, including new Norwegian translation
* Lots of translation updates, including new Norwegian translation.
### 0.54 (2013-11-05)
* New options on the App Details screen to ignore all future updates for that
particular app, or ignore just the current update
particular app, or ignore just the current update.
* Apps with Anti-features are no longer hidden, and the corresponding
preferences to unhide them are removed. Instead they are clearly marked on the
@ -1033,7 +363,7 @@
* Apps with incompatible native code architecture requirements are now correctly
filtered.
* A bug that prevented update notifications from appearing has been fixed
* A bug that prevented update notifications from appearing has been fixed.
* Theming support, with Light and Dark themes.
@ -1042,29 +372,29 @@
installation.
* All app donation options have been grouped into a submenu, and Litecoin
donation support has been added
donation support has been added.
* App filter settings now take effect immediately
* App filter settings now take effect immediately.
* APK native code ABIs are now shown in expert mode
* Apk native code ABIs are now shown in expert mode.
* Search URIs for market://search and fdroid.search: are now handled
* Search uris for market://search and fdroid.search: are now handled.
* A problem with ActionBar Up navigation on some devices has been fixed
* A problem with ActionBar Up navigation on some devices has been fixed.
* Other minor bug fixes, and adjustments to spacings and layouts
* Other minor bug fixes, and adjustments to spacings and layouts.
* Lots of translation updates
* Lots of translation updates.
### 0.50 (2013-08-20)
* New basic app sharing functionality
* Handle f-droid.org web repo as well as market:// app URIs
* Handle f-droid.org web repo as well as market:// app uris
* Search by just typing on main screen and search results screen
* Flattr and bitcoin donation methods added
* Flattr and Bitcoin donation methods added
* Noticeable speedups when returning from installs and uninstalls

View File

@ -26,16 +26,14 @@ track of modifications and fuzzy translations. Applying translations manually
skips all of the fixes and checks, and overrides the fuzzy state of strings.
Note that you cannot change the English strings on Weblate. If you have any
suggestions on how to improve them, open an issue or merge request like you
would if you were making code changes. This way the changes can be reviewed
before the source strings on Weblate are changed.
suggestions on how to improve them, open a merge request like you would if you
were making code changes. This way the changes can be reviewed before the
source strings on Weblate are changed.
## Code Style
We follow the default Android Studio code formatter (e.g. `Ctrl-Alt-L`). This
should be more or less the same as [Android Java
style](https://source.android.com/source/code-style.html). Some key points:
We follow the [Android Java style](https://source.android.com/source/code-style.html).
Some key points:
* Four space indentation
* UTF-8 source files
@ -47,35 +45,63 @@ style](https://source.android.com/source/code-style.html). Some key points:
* Braces are always used after if, for and while
The current code base doesn't follow it entirely, but new code should follow
it. We enforce some of these, but not all, via `./gradlew checkstyle`.
it. We enforce some of these, but not all, via checkstyle.
## Debugging
To get all the logcat messages by F-Droid, you can run:
adb logcat | grep `adb shell ps | grep org.fdroid.fdroid | cut -c10-15`
## Building tips
* Use `gradle --daemon` if you are going to build F-Droid multiple times.
* If you get a message like `Could not find com.android.support:support-...`,
make sure that you have the latest Android support maven repository.
## Running the test suite
Before pushing commits to a merge request, make sure this passes:
./gradlew checkstyle pmd lint
In order to run the F-Droid test suite, you will need to have either a real device
connected via `adb`, or an emulator running. Then, execute the following from the
command line:
./gradlew check
gradle connectedCheck
Many important tests require a device or emulator, but do not work in GitLab CI.
That mean they need to be run locally, and that is usually easiest in Android
Studio rather than the command line.
Note that the CI already runs the tests on an emulator, so you don't
necessarily have to do this yourself if you open a merge request as the tests
will get run.
For a quick way to run a specific JUnit/Robolectric test:
## Versioning
./gradlew testFullDebugUnitTest --tests *LocaleSelectionTest*
Each stable version follows the `X.Y` pattern. Hotfix releases - i.e. when a
stable has an important bug that needs immediate fixing - will follow the
`X.Y.Z` pattern.
For a quick way to run a specific emulator test:
Before each stable release, a number of alpha releases will be released. They
will follow the pattern `X.Y-alphaN`, where `N` is the current alpha number.
These will usually include changes and new features that have not been tested
enough for a stable release, so use at your own risk. Testers and reporters
are very welcome.
./gradlew connectedFullDebugAndroidTest \
-Pandroid.testInstrumentationRunnerArguments.class=org.fdroid.fdroid.MainActivityExpressoTest
The version codes use a number of digits per each of these keys: `XYYZNN`.
So for example, 1.3.1 would be `103150` and 0.95-alpha13 would be `95013`
(leading zeros are omitted).
Note that we use a trailing `50` for actual stable releases, so alphas are
limited to `-alpha49`.
## Making releases
This is an example of a release process for **0.95**:
See https://gitlab.com/fdroid/wiki/-/wikis/Internal/Release-Process#fdroidclient
* We are currently at stable **0.94**
* **0.95-alpha1** is released
* **0.95-alpha2** is released
* **0.95-alpha3** is released
* `stable-v0.95` is branched and frozen
* **0.95** is released
* A bug is reported on the stable release and fixed
* **0.95.1** is released with only that fix
As soon as a stable is tagged, master will move on to `-alpha0` on the next
version. This is a temporary measure - until `-alpha1` is released - so that
moving from stable to master doesn't require a downgrade. `-alpha0` versions
will not be tagged nor released.

View File

@ -1,31 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
* Copyright (C) 2010-2012 Ciaran Gultnieks
* Copyright (C) 2013-2017 Peter Serwylo
* Copyright (C) 2014-2015 Daniel Martí
* Copyright (C) 2014-2018 Hans-Christoph Steiner
* Copyright (C) 2016 Dominik Schürmann
* Copyright (C) 2018 Torsten Grote
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.fdroid.fdroid"
android:installLocation="auto">
android:installLocation="auto"
android:versionCode="98004"
android:versionName="0.98-alpha4"
>
<uses-sdk
tools:overrideLibrary="org.thoughtcrime.ssl.pinning"
android:minSdkVersion="8"
android:targetSdkVersion="22"
/>
<supports-screens
android:anyDensity="true"
@ -33,7 +19,8 @@
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true"
android:xlargeScreens="true" />
android:xlargeScreens="true"
/>
<uses-feature
android:name="android.hardware.telephony"
@ -41,116 +28,93 @@
<uses-feature
android:name="android.hardware.wifi"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.hardware.nfc"
android:required="false" />
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="org.fdroid.fdroid.privileged.USE_SERVICE" />
<!-- Indicate that F-Droid may request root access (introduced by Koush's Superuser app)
This permission is deprecated, but necessary for some old superuser
apps to actually grant superuser access to F-Droid. -->
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
<application
android:name=".FDroidApp"
android:allowBackup="true"
android:description="@string/app_description"
android:fullBackupContent="@xml/backup_rules"
android:name="FDroidApp"
android:icon="@drawable/ic_launcher"
android:label="BobStore"
android:networkSecurityConfig="@xml/network_security_config"
android:label="@string/app_name"
android:description="@string/app_description"
android:allowBackup="true"
android:theme="@style/AppThemeLight"
android:supportsRtl="true"
android:theme="@style/Theme.App">
>
<provider
android:authorities="org.fdroid.fdroid.data.AppProvider"
android:name="org.fdroid.fdroid.data.AppProvider"
android:exported="false"/>
<provider
android:authorities="org.fdroid.fdroid.data.RepoProvider"
android:name="org.fdroid.fdroid.data.RepoProvider"
android:exported="false"/>
<provider
android:authorities="org.fdroid.fdroid.data.ApkProvider"
android:name="org.fdroid.fdroid.data.ApkProvider"
android:exported="false"/>
<provider
android:authorities="org.fdroid.fdroid.data.TempApkProvider"
android:name="org.fdroid.fdroid.data.TempApkProvider"
android:exported="false"/>
<provider
android:authorities="org.fdroid.fdroid.data.TempAppProvider"
android:name="org.fdroid.fdroid.data.TempAppProvider"
android:exported="false"/>
<provider
android:authorities="org.fdroid.fdroid.data.InstalledAppProvider"
android:name="org.fdroid.fdroid.data.InstalledAppProvider"
android:exported="false"/>
<meta-data
android:name="android.app.default_searchable"
android:value=".FDroid" />
<activity
android:name=".privileged.views.InstallConfirmActivity"
android:configChanges="layoutDirection|locale"
android:excludeFromRecents="true"
android:label="@string/menu_install"
android:parentActivityName=".views.main.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".views.main.MainActivity" />
</activity>
<activity
android:name=".privileged.views.UninstallDialogActivity"
android:excludeFromRecents="true" />
<activity
android:name=".views.ManageReposActivity"
android:configChanges="layoutDirection|locale"
android:label="@string/menu_manage"
android:launchMode="singleTask"
android:parentActivityName=".views.main.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".views.main.MainActivity" />
</activity>
<activity
android:name=".NfcNotEnabledActivity"
android:configChanges="layoutDirection|locale"
android:noHistory="true" />
<activity
android:name=".views.RepoDetailsActivity"
android:configChanges="layoutDirection|locale"
android:label="@string/repo_details"
android:parentActivityName=".views.ManageReposActivity"
android:windowSoftInputMode="stateHidden">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".views.ManageReposActivity" />
</activity>
<activity
android:name=".views.AppDetailsActivity"
android:configChanges="layoutDirection|locale"
android:exported="true"
android:label="@string/app_details"
android:parentActivityName=".views.main.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".views.main.MainActivity" />
</activity>
<activity
android:name=".acra.CrashReportActivity"
android:excludeFromRecents="true"
android:finishOnTaskLaunch="true"
android:launchMode="singleInstance"
android:process=":error_report" />
<activity android:name=".views.ScreenShotsActivity" />
<activity
android:name=".data.ObbUrlActivity"
android:theme="@android:style/Theme.NoDisplay" />
<activity
android:name=".installer.DefaultInstallerActivity"
android:theme="@style/AppThemeTransparent" />
<activity
android:name=".installer.ErrorDialogActivity"
android:theme="@style/AppThemeTransparent" />
<activity
android:name=".views.main.MainActivity"
android:name=".FDroid"
android:launchMode="singleTop"
android:windowSoftInputMode="adjustResize">
android:windowSoftInputMode="adjustResize"
android:configChanges="layoutDirection|locale|keyboardHidden|orientation|screenSize" >
<!-- App URLs -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- App URLs -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -160,40 +124,17 @@
<data android:scheme="fdroid.app" />
</intent-filter>
<intent-filter android:autoVerify="false">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:host="f-droid.org" />
<data android:host="www.f-droid.org" />
<data android:host="staging.f-droid.org" />
<data android:pathPrefix="/app/" />
<data android:pathPrefix="/packages/" />
<data android:pathPrefix="/repository/browse" />
<!-- support localized URLs -->
<data android:pathPattern="/.*/packages/.*" />
<data android:pathPattern="/.*/packages/.*/" />
</intent-filter>
<intent-filter android:autoVerify="false">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="f-droid.org" />
<data android:host="www.f-droid.org" />
<data android:host="staging.f-droid.org" />
<data android:pathPrefix="/app/" />
<data android:pathPrefix="/packages/" />
<data android:pathPrefix="/repository/browse" />
<!-- support localized URLs -->
<data android:pathPattern="/.*/packages/.*" />
<data android:pathPattern="/.*/packages/.*/" />
</intent-filter>
<intent-filter>
@ -202,12 +143,23 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="details"
android:scheme="market" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="f-droid.org" />
<data android:host="www.f-droid.org" />
<data android:pathPrefix="/repository/browse" />
</intent-filter>
<intent-filter android:autoVerify="false">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="market" android:host="details" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
@ -225,13 +177,10 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="apps"
android:path="/android"
android:scheme="amzn" />
<data android:scheme="amzn" android:host="apps" android:path="/android" />
</intent-filter>
<intent-filter android:autoVerify="false">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
@ -244,7 +193,6 @@
<data android:path="/gp/mas/dl/android" />
</intent-filter>
<!-- Search URLs -->
<intent-filter>
@ -262,12 +210,10 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="search"
android:scheme="market" />
<data android:scheme="market" android:host="search" />
</intent-filter>
<intent-filter android:autoVerify="false">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
@ -283,7 +229,39 @@
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<intent-filter android:autoVerify="false">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<!-- Handle NFC tags detected from outside our application -->
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<!--
URIs that come in via NFC have scheme/host normalized to all lower case
https://developer.android.com/reference/android/nfc/NfcAdapter.html#ACTION_NDEF_DISCOVERED
-->
<data android:scheme="fdroidrepo" />
<data android:scheme="fdroidrepos" />
</intent-filter>
<!-- Repo URLs -->
<!--
This intent serves two purposes: Swapping apps between devices and adding a
repo from a website (e.g. https://guardianproject.info/fdroid/repo).
We intercept both of these situations in the FDroid activity, and then redirect
to the appropriate handler (swap handling, manage repos respectively) from there.
The reason for this is that the only differentiating factor is the presence
of a "swap=1" in the query string, and intent-filter is unable to deal with
query parameters. An alternative would be to do something like fdroidswap:// as
a scheme, but then we. Need to copy/paste all of this intent-filter stuff and
keep it up to date when it changes or a bug is found.
-->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
@ -296,13 +274,13 @@
character set, making for more compact QR Codes.
-->
<data android:scheme="http" />
<data
android:scheme="HTTP"
tools:ignore="AppLinkUrlError" />
<data android:scheme="HTTP" />
<data android:scheme="https" />
<data
android:scheme="HTTPS"
tools:ignore="AppLinkUrlError" />
<data android:scheme="HTTPS" />
<data android:scheme="fdroidrepo" />
<data android:scheme="FDROIDREPO" />
<data android:scheme="fdroidrepos" />
<data android:scheme="FDROIDREPOS" />
<data android:host="*" />
@ -319,12 +297,6 @@
<data android:pathPattern="/.*/.*/fdroid/repo/*" />
<data android:pathPattern="/.*/.*/.*/fdroid/repo" />
<data android:pathPattern="/.*/.*/.*/fdroid/repo/*" />
<data android:pathPattern="/.*/.*/.*/.*/fdroid/repo" />
<data android:pathPattern="/.*/.*/.*/.*/fdroid/repo/*" />
<data android:pathPattern="/.*/.*/.*/.*/.*/fdroid/repo" />
<data android:pathPattern="/.*/.*/.*/.*/.*/fdroid/repo/*" />
<data android:pathPattern="/.*/.*/.*/.*/.*/.*/fdroid/repo" />
<data android:pathPattern="/.*/.*/.*/.*/.*/.*/fdroid/repo/*" />
<data android:path="/fdroid/archive" />
<data android:pathPattern="/fdroid/archive/*" />
<data android:pathPattern="/.*/fdroid/archive" />
@ -333,8 +305,6 @@
<data android:pathPattern="/.*/.*/fdroid/archive/*" />
<data android:pathPattern="/.*/.*/.*/fdroid/archive" />
<data android:pathPattern="/.*/.*/.*/fdroid/archive/*" />
<data android:pathPattern="/.*/.*/.*/.*/fdroid/archive" />
<data android:pathPattern="/.*/.*/.*/.*/fdroid/archive/*" />
<!--
Some QR Code scanners don't respect custom schemes like fdroidrepo://,
so this is a workaround, since the local repo URL is all uppercase in
@ -345,233 +315,134 @@
<data android:pathPattern="/.*/.*/FDROID/REPO" />
<data android:pathPattern="/.*/.*/.*/FDROID/REPO" />
</intent-filter>
<!-- Repo URLs -->
<!--
This intent serves two purposes: Swapping apps between devices and adding a
repo from a website (e.g. https://guardianproject.info/fdroid/repo).
We intercept both of these situations in the FDroid activity, and then redirect
to the appropriate handler (swap handling, manage repos respectively) from there.
The reason for this is that the only differentiating factor is the presence
of a "swap=1" in the query string, and intent-filter is unable to deal with
query parameters. An alternative would be to do something like fdroidswap:// as
a scheme, but then we need to copy/paste all of this intent-filter stuff and
keep it up to date when it changes or a bug is found.
This filter supports HTTP and HTTPS schemes. There is an additional filter for
fdroidrepo:// and fdroidrepos://
-->
</activity>
<activity
android:name=".privileged.views.InstallConfirmActivity"
android:label="@string/menu_install"
android:parentActivityName=".FDroid"
android:configChanges="layoutDirection|locale" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".FDroid" />
</activity>
<activity
android:name=".views.ManageReposActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:parentActivityName=".FDroid"
android:configChanges="layoutDirection|locale" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".FDroid" />
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<!--
Android's scheme matcher is case-sensitive, so include
ALL CAPS versions to support ALL CAPS URLs in QR Codes.
QR Codes have a special ALL CAPS mode that uses a reduced
character set, making for more compact QR Codes.
-->
<data android:scheme="fdroidrepo" />
<data
android:scheme="FDROIDREPO"
tools:ignore="AppLinkUrlError" />
<data android:scheme="fdroidrepos" />
<data
android:scheme="FDROIDREPOS"
tools:ignore="AppLinkUrlError" />
<data android:mimeType="application/vnd.org.fdroid.fdroid.repo" />
</intent-filter>
</activity>
<activity
android:name=".NfcNotEnabledActivity"
android:noHistory="true"
android:configChanges="layoutDirection|locale" />
<activity
android:name=".views.RepoDetailsActivity"
android:label="@string/repo_details"
android:parentActivityName=".views.ManageReposActivity"
android:windowSoftInputMode="stateHidden"
android:configChanges="layoutDirection|locale" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".views.ManageReposActivity" />
</activity>
<!--
Same as the intent filter listening for repositories via https://*/fdroid/repo, except this
looks for fdroidrepos://* and doesn't care what the path is.
-->
<activity
android:name=".AppDetails"
android:label="@string/app_details"
android:exported="true"
android:parentActivityName=".FDroid"
android:configChanges="layoutDirection|locale" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".FDroid" />
</activity>
<activity
android:label="@string/menu_settings"
android:name=".PreferencesActivity"
android:parentActivityName=".FDroid" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".FDroid" />
</activity>
<activity
android:label="@string/menu_swap"
android:name=".views.swap.SwapWorkflowActivity"
android:parentActivityName=".FDroid"
android:theme="@style/SwapTheme.Wizard"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".FDroid" />
</activity>
<!-- Note: Theme.NoDisplay, this activity shows dialogs only -->
<activity
android:name=".privileged.install.InstallExtensionDialogActivity"
android:theme="@android:style/Theme.NoDisplay" />
<receiver
android:name=".privileged.install.InstallExtensionBootReceiver" >
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<!--
URIs that come in via NFC have scheme/host normalized to all lower case
https://developer.android.com/reference/android/nfc/NfcAdapter.html#ACTION_NDEF_DISCOVERED
-->
<data android:scheme="fdroidrepo" />
<data android:scheme="fdroidrepos" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<!-- Handle NFC tags detected from outside our application -->
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity android:name=".views.apps.AppListActivity" />
<activity
android:name=".views.installed.InstalledAppsActivity"
android:parentActivityName=".views.main.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".views.main.MainActivity" />
</activity>
<activity
android:name=".views.InstallHistoryActivity"
android:parentActivityName=".views.main.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".views.main.MainActivity" />
</activity>
<activity android:name=".AboutActivity" />
<activity
android:name=".installer.FileInstallerActivity"
android:theme="@style/AppThemeTransparent" />
<provider
android:name="org.fdroid.fdroid.data.AppProvider"
android:authorities="${applicationId}.data.AppProvider"
android:exported="false" />
<provider
android:name="org.fdroid.fdroid.data.RepoProvider"
android:authorities="${applicationId}.data.RepoProvider"
android:exported="false" />
<!-- Note: AppThemeTransparent, this activity shows dialogs only -->
<provider
android:name="org.fdroid.fdroid.data.ApkProvider"
android:authorities="${applicationId}.data.ApkProvider"
android:exported="false" />
<!-- Note: AppThemeTransparent, this activity shows dialogs only -->
<provider
android:name="org.fdroid.fdroid.data.TempApkProvider"
android:authorities="${applicationId}.data.TempApkProvider"
android:exported="false" />
<!-- Note: AppThemeTransparent, this activity shows dialogs only -->
<provider
android:name="org.fdroid.fdroid.data.TempAppProvider"
android:authorities="${applicationId}.data.TempAppProvider"
android:exported="false" />
<provider
android:name="org.fdroid.fdroid.data.InstalledAppProvider"
android:authorities="${applicationId}.data.InstalledAppProvider"
android:exported="false" />
<provider
android:name="org.fdroid.fdroid.data.AppPrefsProvider"
android:authorities="${applicationId}.data.AppPrefsProvider"
android:exported="false" />
<provider
android:name="org.fdroid.fdroid.data.PackageIdProvider"
android:authorities="${applicationId}.data.PackageIdProvider"
android:exported="false" />
<provider
android:name="org.fdroid.fdroid.data.CategoryProvider"
android:authorities="${applicationId}.data.CategoryProvider"
android:exported="false" />
<provider
android:name="org.fdroid.fdroid.installer.ApkFileProvider"
android:authorities="${applicationId}.installer.ApkFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/apk_file_provider" />
</provider>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.installer"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/installer_file_provider" />
</provider>
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
android:exported="false"
tools:node="remove" />
<receiver android:name=".receiver.StartupReceiver">
<receiver android:name=".receiver.StartupReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
<receiver android:name=".receiver.PackageManagerReceiver">
<receiver android:name=".receiver.PackageAddedReceiver" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_CHANGED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<receiver android:name=".receiver.PackageUpgradedReceiver" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<receiver android:name=".receiver.PackageRemovedReceiver" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<receiver
android:name=".NotificationBroadcastReceiver"
android:exported="false">
<!-- Doesn't require an intent-filter because it is explicitly invoked via Intent.setClass() -->
</receiver>
<receiver android:name=".receiver.DeviceStorageReceiver">
<receiver android:name=".receiver.WifiStateChangeReceiver" >
<intent-filter>
<action android:name="android.intent.action.DEVICE_STORAGE_LOW" />
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
<receiver android:name=".receiver.DownloadManagerReceiver" >
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED" />
</intent-filter>
</receiver>
<service
android:name=".UpdateService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name=".UpdateJobService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name=".net.DownloaderService"
android:exported="false" />
<service
android:name=".installer.InstallerService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name=".DeleteCacheService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name=".net.ConnectivityMonitorService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name=".installer.InstallManagerService"
android:exported="false" />
<service
android:name=".installer.InstallHistoryService"
android:exported="false" />
<service
android:name=".installer.ObfInstallerService"
android:exported="false" />
<service
android:name=".data.InstalledAppProviderService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name=".AddRepoIntentService"
android:exported="false" />
<service android:name=".UpdateService" />
<service android:name=".net.WifiStateChangeService" />
<service android:name=".localrepo.SwapService" />
</application>
</manifest>

View File

@ -71,28 +71,6 @@
color: #fff;
}
details {
margin-left: 1em;
}
ul {
list-style-type: none;
}
ul > li {
padding: 1em 0;
}
ul > li a {
font-size: xx-large;
text-decoration: none;
color: #fff;
}
ul > li a img {
padding-right: 0.5em;
}
#download-from-web {
padding-left: 2em;
padding-right: 2em;
@ -127,12 +105,5 @@
<img src="swap-tick-not-done.png" class="tick not-done" alt="Not done" />
</li>
</ol>
<br/><br/><br/><br/>
<details>
<summary>Available Apps</summary>
<ul>
{{APP_LIST}}
</ul>
</details>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 887 B

228
F-Droid/build.gradle Normal file
View File

@ -0,0 +1,228 @@
apply plugin: 'com.android.application'
apply plugin: 'witness'
apply plugin: 'checkstyle'
repositories {
jcenter()
}
dependencies {
compile project(':privileged-api-lib')
compile 'com.android.support:support-v4:22.2.1'
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:support-annotations:22.2.1'
compile 'org.thoughtcrime.ssl.pinning:AndroidPinning:1.0.0'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.google.zxing:core:3.2.1'
compile 'eu.chainfire:libsuperuser:1.0.0.201510071325'
compile 'cc.mvdan.accesspoint:library:0.1.3'
compile 'commons-net:commons-net:3.4'
compile 'org.openhab.jmdns:jmdns:3.4.2'
androidTestCompile 'commons-io:commons-io:2.2'
}
if (!hasProperty('sourceDeps')) {
repositories {
// This is here until we sort out all dependencies from mavenCentral/jcenter. Once all of
// the dependencies below have been sorted out, this can be removed.
flatDir {
dirs 'libs/binaryDeps'
}
}
dependencies {
compile 'com.madgag.spongycastle:pkix:1.53.0.0'
compile 'com.madgag.spongycastle:prov:1.53.0.0'
compile 'com.madgag.spongycastle:core:1.53.0.0'
// Upstream doesn't have a binary on mavenCentral/jcenter yet:
// https://github.com/kolavar/android-support-v4-preferencefragment/issues/13
compile(name: 'support-v4-preferencefragment-release', ext: 'aar')
// Fork for F-Droid, including support for https. Not merged into upstream
// yet (seems to be a little unsupported as of late), so not using mavenCentral/jcenter.
compile(name: 'nanohttpd-2.1.0')
// Upstream doesn't have a binary on mavenCentral, and it is an SVN repo on
// Google Code. We include this code directly in this repo, and have made
// modifications that should be pushed to anyone who wants to maintain it.
compile(name: 'zipsigner')
}
// Only do the libraries imported from maven repositories. Our own libraries
// (like privileged-api-lib) and the prebuilt jars already checked into the
// source code don't need to be here.
dependencyVerification {
verify = [
'com.android.support:support-v4:c62f0d025dafa86f423f48df9185b0d89496adbc5f6a9be5a7c394d84cf91423',
'com.android.support:appcompat-v7:4b5ccba8c4557ef04f99aa0a80f8aa7d50f05f926a709010a54afd5c878d3618',
'com.android.support:support-annotations:104f353b53d5dd8d64b2f77eece4b37f6b961de9732eb6b706395e91033ec70a',
'org.thoughtcrime.ssl.pinning:AndroidPinning:afa1d74e699257fa75cb109ff29bac50726ef269c6e306bdeffe8223cee06ef4',
'com.nostra13.universalimageloader:universal-image-loader:dbd5197ffec3a8317533190870a7c00ff3750dd6a31241448c6a5522d51b65b4',
'com.google.zxing:core:b4d82452e7a6bf6ec2698904b332431717ed8f9a850224f295aec89de80f2259',
'eu.chainfire:libsuperuser:a3ed4589e14f7d5ab255b3f31f7b79aaa1173a579035788f8db7c74215453a12',
'cc.mvdan.accesspoint:library:dc89a085d6bc40381078b8dd7776b12bde0dbaf8ffbcddb17ec4ebc3edecc7ba',
'commons-net:commons-net:38cf2eca826b8bcdb236fc1f2e79e0c6dd8e7e0f5c44a3b8e839a1065b2fbe2e',
'org.openhab.jmdns:jmdns:7a4b34b5606bbd2aff7fdfe629edcb0416fccd367fb59a099f210b9aba4f0bce',
'com.madgag.spongycastle:pkix:6aba9b2210907a3d46dd3dcac782bb3424185290468d102d5207ebdc9796a905',
'com.madgag.spongycastle:prov:029f26cd6b67c06ffa05702d426d472c141789001bcb15b7262ed86c868e5643',
'com.madgag.spongycastle:core:9b6b7ac856b91bcda2ede694eccd26cefb0bf0b09b89f13cda05b5da5ff68c6b',
]
}
} else {
logger.info "Setting up *source* dependencies for F-Droid (because you passed in the -PsourceDeps argument to gradle while building)."
dependencies {
compile(project(':extern:support-v4-preferencefragment')) {
exclude module: 'support-v4'
}
compile project(':extern:nanohttpd:core')
compile project(':extern:zipsigner')
}
task binaryDeps(type: Copy, dependsOn: ':F-Droid:prepareReleaseDependencies') {
enabled = project.hasProperty('sourceDeps')
description = "Copies .jar and .aar files from subproject dependencies in extern/ to F-Droid/libs. Requires the sourceDeps property to be set (\"gradle -PsourceDeps binaryDeps\")"
from('../extern/') {
include 'support-v4-preferencefragment/build/outputs/aar/support-v4-preferencefragment-release.aar'
include 'nanohttpd/core/build/libs/nanohttpd-2.1.0.jar'
include 'zipsigner/build/libs/zipsigner.jar'
}
into 'libs/binaryDeps'
includeEmptyDirs false
eachFile { FileCopyDetails details ->
// Don't copy to a sub folder such as libs/binaryDeps/Project/build/outputs/aar/project.aar, but
// rather libs/binaryDeps/project.aar.
details.path = details.name
}
}
}
android {
compileSdkVersion 22
buildToolsVersion '23.0.2'
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
androidTest.setRoot('test')
androidTest {
manifest.srcFile 'test/AndroidManifest.xml'
java.srcDirs = ['test/src']
resources.srcDirs = ['test/src']
aidl.srcDirs = ['test/src']
renderscript.srcDirs = ['test/src']
res.srcDirs = ['test/res']
assets.srcDirs = ['test/assets']
}
}
buildTypes {
// use proguard on debug too since we have unknowingly broken
// release builds before.
all {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
compileOptions.encoding = "UTF-8"
// Use Java 1.7, requires minSdk 8
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
lintOptions {
checkReleaseBuilds false
abortOnError false
htmlReport true
xmlReport false
textReport false
// Our translations are crowd-sourced
disable 'MissingTranslation'
// We have locale folders like "values-he" and "values-id" as symlinks
// since some devices ship deprecated locale codes
disable 'LocaleFolder'
// Like supportsRtl or parentActivityName. They are on purpose.
disable 'UnusedAttribute'
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/INDEX.LIST'
exclude '.readme'
}
}
checkstyle {
toolVersion = '6.13'
}
task checkstyle(type: Checkstyle) {
configFile file("${project.rootDir}/config/checkstyle/checkstyle.xml")
source 'src', 'test/src'
include '**/*.java'
exclude '**/gen/**'
classpath = files()
}
// This person took the example code below from another blogpost online, however
// I lost the reference to it:
// http://stackoverflow.com/questions/23297562/gradle-javadoc-and-android-documentation
android.applicationVariants.all { variant ->
task("generate${variant.name}Javadoc", type: Javadoc) {
title = "$name $version API"
description "Generates Javadoc for F-Droid."
source = variant.javaCompile.source
def sdkDir
Properties properties = new Properties()
File localProps = project.rootProject.file('local.properties')
if (localProps.exists()) {
properties.load(localProps.newDataInputStream())
sdkDir = properties.getProperty('sdk.dir')
} else {
sdkDir = System.getenv('ANDROID_HOME')
}
if (!sdkDir) {
throw new ProjectConfigurationException("Cannot find android sdk. Make sure sdk.dir is defined in local.properties or the environment variable ANDROID_HOME is set.", null)
}
ext.androidJar = "${sdkDir}/platforms/${android.compileSdkVersion}/android.jar"
classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
options.links("http://docs.oracle.com/javase/7/docs/api/");
options.links("http://d.android.com/reference/");
exclude '**/BuildConfig.java'
exclude '**/R.java'
}
}

Binary file not shown.

Binary file not shown.

35
F-Droid/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,35 @@
-dontobfuscate
-dontoptimize
-keepattributes SourceFile,LineNumberTable,Exceptions
-keep class org.fdroid.fdroid.** {*;}
-dontskipnonpubliclibraryclassmembers
-dontwarn android.test.**
-dontwarn com.android.support.test.**
-dontwarn javax.naming.**
-dontnote android.support.**
-dontnote **ILicensingService
# These libraries are known to break if minification is enabled on them. They
# use reflection to instantiate classes, for example. If the keep flags are
# removed, proguard will strip classes which are required, which may result in
# crashes.
-keep class kellinwood.security.zipsigner.** {*;}
-keep class org.spongycastle.** {*;}
# This keeps class members used for SystemInstaller IPC.
# Reference: https://gitlab.com/fdroid/fdroidclient/issues/79
-keepclassmembers class * implements android.os.IInterface {
public *;
}
# Samsung Android 4.2 bug
# https://code.google.com/p/android/issues/detail?id=78377
-keepnames class !android.support.v7.internal.view.menu.**, ** {*;}
-keep public class android.support.v7.widget.** {*;}
-keep public class android.support.v7.internal.widget.** {*;}
-keep public class * extends android.support.v4.view.ActionProvider {
public <init>(android.content.Context);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 947 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 788 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 974 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 919 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 786 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1003 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 153 B

After

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 890 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 741 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 727 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

Some files were not shown because too many files have changed in this diff Show More