mollyim / mollyim-android

Enhanced and security-focused fork of Signal.
GNU Affero General Public License v3.0
1.37k stars 77 forks source link

Reimplement AMOLED-friendly "true black" dark theme option #309

Open konradmoesch opened 2 months ago

konradmoesch commented 2 months ago

Is there an existing request for this?

Feature description

I'd like to request adding back a true black theme. I feel that there is a need for it (in #128, most of the reactions to the comments seem to be unsatisfied that this was simply removed, without properly supporting both dark themes) and personally, most of my apps do support it. Please add an option for a true dark background back! I think I am not alone when I say that this was one of the reasons for me to switch to molly, and for now I will have to stay on pre-v2.7.2-1...

matchboxbananasynergy commented 2 months ago

It was removed for valid reasons, and it has already been expressed that this can be added back when it can be done in a maintainable way.

I understand not everyone is going to be happy, but the previous situation where the only dark theme was the AMOLED one wasn't one that made much sense. An amount of people are always going to be upset when a niche feature or change they enjoyed is removed, but you can't please everyone.

Just consider that the time it takes to maintain the theme can be spent adding new security features to Molly instead. When you put it in that context, the decision starts making a whole lot more sense.

konradmoesch commented 2 months ago

Adding an AMOLED theme should be pretty straightforward, I have done this for my apps via a theme overlay. The implementation in https://github.com/jarnedemeulemeester/findroid is very similar and Molly could do something similar:

in values-night.xml, the background color gets overriden to black and all suface colors are also set to reference this color:

<style name="ThemeOverlay.Molly.Amoled" parent="">
        <!-- Surface -->
        <item name="android:colorBackground">@android:color/black</item>
        <item name="colorSurface">@android:color/black</item>
        <item name="colorSurfaceContainer">?attr/colorSurface</item>
        <item name="colorSurfaceContainerLow">?attr/colorSurface</item>
        <item name="colorSurfaceContainerHigh">?attr/colorSurface</item>
</style>

Then, one only has to add a preference, and the ThemeOverlay has to be applied, if enabled: in MainActivity

setTheme(CoreR.style.ThemeOverlay_Findroid_Amoled)

Unfortunately, I was unable to implement this myself (there are so many different (for me quite confusingly named) [..]colors.xml that just link to each other and there seems to be at least two different preference systems (TextSecurePreferences and SignalStore, with no documentation/comments whatsoever I could find), so I was unable to really grok your code).

With the above code snippets, however, it should be very straightforward to implement a ThemeOverlay and adapt it to Molly, I think. This would mean very low maintenance overhead, too. Really looking forward to seeing this implemented:)

valldrac commented 1 month ago

Hey! Thanks for the sharing. I've thought about this approach before, but it got sidelined for other priorities after discussing it with the community.

I've got some code snippets for it actually. Feel free to use them as a starting point. Looking forward to seeing your pull-request!

https://gist.github.com/valldrac/6867c8fad3b923a32b3bc06ddca92ccc

ghost commented 1 month ago

I have been using a custom fork of Signal for more then a year now that I change the main dark color to black using GitHub Actions, maybe you can do it also and release a separate variant that has the AMOLED theme, instead of maintaining an extra theme at one app.

You can take a look here: https://github.com/thekyber/Signal-AMOLED/blob/56931050ed7c60a5465676c176b9cd5f54fba5d8/.github/workflows/check-build-release.yml#L110

It will be very easy since you are already using GitHub Actions to build and publish.

BAXSD commented 3 weeks ago

Any news/updates about this?