suvanl / fixmylinks Goto Github PK
View Code? Open in Web Editor NEW๐๐ ๏ธ Replace domain names and remove unwanted tracking data from links shared on Android
License: GNU General Public License v3.0
๐๐ ๏ธ Replace domain names and remove unwanted tracking data from links shared on Android
License: GNU General Public License v3.0
- FixMyLinks app version: 1.1.0
- Android version: 14
- Android build number: UP1A.231105.003
- Device model: Google Pixel 6 Pro
- Device type: Physical
Sharing a URL (via the FixMyLinks "Share to..." option in the native share sheet) that has a "www" subdomain and doesn't have any URL parameters either:
Sharing a URL that has a "www" subdomain and doesn't have any URL parameters causes the app to crash with an NPE.
The app shouldn't crash when sharing such a link; this is not the expected behaviour. The issue causing an NPE to be thrown should be fixed.
https://www.framer.com/motion/guide-reduce-bundle-size/
via the native share sheet using the FixMyLinks "Share to..." optionNo response
Display a linear progress bar to convey how much the user has progressed in the "add new rule" flow (currently FmlScreen.SelectRuleType
and FmlScreen.AddRule
).
To improve UX by allowing users (particularly first-time users) to understand how long this flow takes to complete, and how much progress they have currently made.
Share the progress state (e.g., a value between 0F
and 1F
) across screens and use this to set the level of progress on the progress bar.
No response
Make it possible to disable built-in rules at an individual level and re-enable any disabled ones at any time.
It currently isn't possible to disable built-in rules. They are all enabled by default. It should be possible to disable these rules individually as desired and re-enable them at any time.
Persistently store the enabled state (isEnabled
) of the set of built-in rules.
isBuiltIn
/ isCustom
column to the BaseRule schema and store the built-in rules in the DB, then reusing custom rule enabling/disabling logic would theoretically be seamless or will require little effort to get working.
Enable the "Apply this rule" switch on RuleDetailsScreen for built-in rules (currently only enabled for custom rules).
isEnabled
value for the currently selected custom rule.No response
This codebase currently uses manual dependency injection.
It may be a good idea to move to automated DI using Dagger/Hilt for the reasons listed in the following section.
Automated DI will not introduce any behavioural changes to the app, but may improve developer experience (DX) and eradicate the issues that manual DI has the potential to introduce (also described in the following section).
As the app grows in size, more and more boilerplate code (such as factories) will have to be written, and dependency injection (DI) will get more complex since the scope and lifecycle of containers have to be managed manually, optimising and discarding containers that are no longer needed. This level of complexity and manual memory management ends up making the app more error-prone since there are more areas in which something could be incorrectly implemented without realising further down the line, and since the bugs/memory leaks introduced by these incorrect implementations may be subtle and difficult to debug.
Therefore, the recommended approach is to use automated DI with Hilt (built on top of Dagger), according to the Android developer documentation.
Use Dagger/Hilt to replace manual dependency injection code.
Useful resources:
In the UI, display a visual indication of whether a rule is enabled or disabled.
Currently, the only way to know if a rule is enabled or disabled is to go to the rule's "edit" screen and check whether the "Enabled" option switch is on or off.
No response
- FixMyLinks app version: 1.2.1
- Android version: 14
- Android build number: UE1A.230829.019
- Device model: Generic AVD ("Medium Phone")
- Device type: Emulated
An option should exist to delete all rules while on RulesScreen. This option (via a button) used to be there before the UI was changed to use cards to represent rule items, but now no longer exists.
No such option exists anymore.
A way to achieve this behaviour should be restored, such as by making it possible to select rule items and delete the selected rules, with a "select all" feature too, to restore the aforementioned behaviour.
No response
Display built-in rule summary info on RulesScreen and HomeScreen in appropriate formats while conveying whether each built-in rule is active or inactive (note that it currently isn't possible to disable built-in rules, but will be in the future).
Without reading the documentation, it isn't possible to know what the built-in rules are, and which ones are active or inactive.
RulesScreen
HomeScreen
Note
See this comment.
No response
Appends the build date (UTC), commit hash, and branch name to the app's versionName
, in a format such as {versionName}.YYMMDD-{commit_hash}@{branch_name}
.
Make identifying between different builds within the same versionName easier by appending the short form of the latest commit hash as well as the current timestamp at build time.
At build time:
git rev-parse --short HEAD
)versionName
in the format {versionName}.YYMMDD-{commit_hash}@{branch_name}
No response
- FixMyLinks app version: 1.1.0
- Android version: 10 (API 29)
- Android build number: QSR1.190920.001
- Device model: Generic AVD ("Medium Phone")
- Device type: Emulated
The 'edit' FAB should be fully visible and should not be obstructed, hidden, or drawn over by any other elements.
This FAB is partially hidden by the navigation bar when using 3-button or 2-button navigation, as seen in the attached screenshots (see Additional info section).
The FAB should have sufficient padding to ensure that no part of it is hidden behind the system navigation bar.
Reference images
Support the wildcard character (*
) in the triggerDomain
of a rule.
The expected behaviour is that this would match the domain to any subdomain, e.g.: *.youtube.com
, so that both m.youtube.com
and www.youtube.com
will trigger the rule. Should also work for the apex domain (i.e., youtube.com
).
Prevents duplicate rules from being needed for different subdomains.
For example, a rule with a trigger of youtube.com
won't be triggered for m.youtube.com
(it will only be triggered on youtube.com
and www.youtube.com
).
URI.host
String and everything before it if the URI matches the format of a URL with a subdomain.No response
- FixMyLinks app version: 1.2.1 (ui-refine branch)
- Android version: 13
- Android build number: TE1A.220922.010
- Device model: Pixel 7 Pro
- Device type: Emulated
The Box
layout composable with a custom background shape of ScallopShape
retains its background in place after being pushed down when the SearchBar
composable's 'active' state becomes true
and goes back to false
.
The custom ScallopShape
background shape of this Box
gets lost, resulting in the Box
having no background. Its content (in this case an Icon
) still gets displayed as expected.
The actual behaviour is incorrect as the background should remain in place; there is no reason for it to be lost.
This should be fixed by ensuring that the background remains in place when the Box
is pushed back up after closing the search bar.
Box
containing an Icon
as its content. The Box
has a custom background shape of ScallopShape
.Box
containing the Icon
has disappeared.Screen recording:
Support saving custom link rules locally in persistent storage and applying them just like built-in rules.
Users should be able to save rules of any supported type, i.e.:
DOMAIN_NAME
URL_PARAMS_ALL
URL_PARAMS_SPECIFIC
DOMAIN_NAME_AND_URL_PARAMS_ALL
DOMAIN_NAME_AND_URL_PARAMS_SPECIFIC
will be user-selectable in the future.
Implements a core functionality of the app currently labelled as "coming soon" in the README.
The following ERD depicts a logical model of the local database design.
Eventually, users will be presented with an option to store these rules remotely (as well as locally) - essentially acting as a cloud backup.
- FixMyLinks app version: 1.1.0
- Android version: 14
- Android build number: UP1A.231105.003
- Device model: Google Pixel 6 Pro
- Device type: Physical
Applying a rule on a URL that has a "www" subdomain should result in this subdomain being kept in place after applying the URL_PARAMS_ALL
rule.
For example, for a URL_PARAMS_ALL
rule on "youtube.com":
https://www.youtube.com/watch?v=video_id_here
https://www.youtube.com/watch
After applying a rule on a link that has a "www" subdomain (such as https://www.youtube.com/watch?v=video_id_here
), the modified link produced after applying the rule (such as a URL_PARAMS_ALL
rule in this case) gets rid of the "www" subdomain (resulting in https://youtube.com/watch
in this case).
In summary:
https://www.youtube.com/watch?v=video_id_here
https://youtube.com/watch
The "www" subdomain getting dropped is a potential issue if the same site isn't served on the apex domain and "www" subdomain.
This should be fixed by ensuring this subdomain gets restored after applying the rule (since, as an implementation detail, the "www" subdomain gets stripped out of the URL if it contains it, before applying the rule logic).
URL_PARAMS_ALL
ruleNo response
- FixMyLinks app version: 1.2.1
- Android version: 14 (API 34)
- Android build number: UE1A.230829.019
- Device model: Generic AVD (Medium Phone API 34)
- Device type: Emulated
There should be no way to delete a built-in rule.
It's possible to "delete" a built-in rule in the same way that a custom rule can be deleted, via RuleDetailsScreen.
The rule doesn't actually get deleted, but there's nothing to indicate that a built-in rule cannot be deleted, so users may expect the rule to have been deleted successfully.
The overflow menu containing the "Delete" option on RuleDetailsScreen should only be displayed for custom rules, not built-in rules.
No response
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.