No description
- Java 52.1%
- Kotlin 47.9%
- Recover deleted messages: archive remote-delete blobs into our own
SQLite (reseam_antidelete.db, auto-mirrored to external files dir on
every init) and re-inject them into processLoadedMessages so the chat
rebuilds MessageObjects through the normal pipeline, with a 🗑️ marker
appended to messageOwner.message. Local vs remote distinguished by a
flag set in MessagesController.deleteMessages and consumed in
markMessagesAsDeletedInternal — server-pushed deletes never set it.
ChatActivity.processDeletedMessages is filtered to skip removal of
archived mids in real time, and ChatActivity.onResume re-applies
markers (with a 5x300ms retry) so a restart doesn't wipe them.
- Allow screenshots in secret viewers: prepend FLAG_SECURE strip to
SecretMediaViewer.openMedia so the bit is cleared before wm.addView,
enabling screenshot/screen-record of view-once and self-destruct media.
- Field access uses ctx.wrapField(FieldRef) on stable non-obfuscated
names (messagesDict, chatAdapter, windowLayoutParams) — no reflection
in the extension. RecyclerView.Adapter + TLRPC.User stubs ship for
notifyDataSetChanged and generateLayout direct calls.
|
||
|---|---|---|
| .forgejo/workflows | ||
| apps | ||
| gradle/wrapper | ||
| LICENSES | ||
| shared/settings-runtime | ||
| .gitignore | ||
| android-extension-module.gradle.kts | ||
| build.gradle.kts | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| manifest.toml | ||
| REUSE.toml | ||
| settings.gradle.kts | ||