Either enabled or disabled by default, we should offer the option to hide apps with certain anti-features.
This used to be the case in very old versions of F-Droid prior to content providers. I think they got dropped because they were non-trivial to port over to the new system, and making F-Droid not crash due to out-of-memory exceptions was more important.
@pserwylo since you wrote the whole the whole content provider stuff, perhaps you have an idea on how to implement this? If you explain it briefly, maybe someone else will provide a patch.
Designs
Child items
...
Show closed items
Linked items
0
Link issues together to show that they're related.
Learn more.
Replicant specifically requested this. They include F-Droid by default, but do not like that by default it shows non-free apps, or apps that promote or rely on non-free things.
I think Replicant's definition is stricter, as is anything that relies on something non-free to functional. Something like NewPipe as it is now does nothing without YouTube. But the app's source code is all free software.
Debian absolutely calls contrib non-free, that's why its separate, and that's why lots of people are constantly lobbying to get contrib and non-free dropped from Debian entirely.
Off topic, but needs clarification:
contrib packages contain DFSG-compliant software, but have dependencies not in main (possibly packaged for Debian in non-free).
contrib is free software that depends on non-free to be built or run
I'm going to do some work on this. I think it can be done without concern for the UX overhaul, given that it will always be tucked away in Settings (which will no doubt still exist somewhere after the UX overhaul). The only other changes are database related, which of course will not affect the UX.
My plan of attack to make this so that it can be done in a performant way is the following:
Write tests to ensure that an App correctly gets anti features populated when read from AppProvider
Create a new database table called antifeatures
Extract the comma separated string features column from fdroid_app into a join table appAntiFeatures and add a join onto this anti features table when querying for apps.
Add preferences for filtering out anti features, and then use the result of those preferences to limit the results based on the join table.
This has many benefits:
It will be very amenable to good tests to ensure the database migration works successfully
The query to get apps and exclude certain anti features will actually work (it isn't actually possible with the current database setup)
The query to get apps and exclude certain anti features will be performant, as it will make good use of SQLite indexes.
Each of the steps I outlined above can be committed to master separately so it doesn't need to happen at once.
I guess anti-features are now in the app. What if an app fixes anti-features? Like removes tracking or ads? I guess we can just start with the existing per-app data, and deal with per-APK later.
@eighthave indeed, they have always been per-app. Replacing with per-apk would probably be better, but it's a server side change, and not a client one.
What we do currently is remove the anti-feature if an app gets rid of the cause, even if it's still present in earlier versions.
As Replicant developers are really busy, and are more used to system programming(C, hardware related) than write/modify Android applications. I fear that trying to fix it ourselves will take way too much time and delay the fix a lot.
However many of the Replicant users that might like to help Replicant often lack system programming skills, but are really good at writing Android applications.
Due to the above, we could make an announcement on the blog, to ask such users for help to fix this really problematic issue.