This fixes an edge case seen on ConversationFragment, where if the device time format is switched between 12/24 hour format while the app is running, the old time format will still be displayed when the app is resumed. This is due to a design flaw in `DateTimeFormatter.ofLocalizedTime`, where the time format is statically cached and not updated upon configuration change. The `LocalTime.formatHours()` extension method was updated to no longer rely on the misbehaving `ofLocalTime` method. In addition, `ConversationMessaageComputeWorkers.recomputeFormattedDate` was designed to skip recomputing non-relative timestamps. This works in most cases but not this specific edge case. A `force: Boolean` flag was added to force all items to be updated. And the `force = true` flag was passed upon `onResume` of the fragment. Closes #14121
Signal Android
Signal is a simple, powerful, and secure messenger.
Signal uses your phone's data connection (WiFi/3G/4G/5G) to communicate securely. Millions of people use Signal every day for free and instantaneous communication anywhere in the world. Send and receive high-fidelity messages, participate in HD voice/video calls, and explore a growing set of new features that help you stay connected. Signal’s advanced privacy-preserving technology is always enabled, so you can focus on sharing the moments that matter with the people who matter to you.
Currently available on the Play Store and signal.org.
Contributing Bug reports
We use GitHub for bug tracking. Please search the existing issues for your bug and create a new one if the issue is not yet tracked!
https://github.com/signalapp/Signal-Android/issues
Joining the Beta
Want to live life on the bleeding edge and help out with testing?
You can subscribe to Signal Android Beta releases here: https://play.google.com/apps/testing/org.thoughtcrime.securesms
If you're interested in a life of peace and tranquility, stick with the standard releases.
Contributing Code
If you're new to the Signal codebase, we recommend going through our issues and picking out a simple bug to fix in order to get yourself familiar. Also please have a look at the CONTRIBUTING.md, that might answer some of your questions.
For larger changes and feature ideas, we ask that you propose it on the unofficial Community Forum for a high-level discussion with the wider community before implementation.
Contributing Ideas
Have something you want to say about Signal projects or want to be part of the conversation? Get involved in the community forum.
Help
Support
For troubleshooting and questions, please visit our support center!
Documentation
Looking for documentation? Check out the wiki!
https://github.com/signalapp/Signal-Android/wiki
Legal things
Cryptography Notice
This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information.
The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.
License
Copyright 2013-2025 Signal Messenger, LLC
Licensed under the GNU AGPLv3: https://www.gnu.org/licenses/agpl-3.0.html
Google Play and the Google Play logo are trademarks of Google LLC.
